With … as konstruksiyasi kontekst menedjeri tomonidan ko`rsatmalar blokining bajarilishi jarayonini qamrab olish uchun ishlatiladi. Ba`zida bu usuldan foydalanish try/except/finally dan ko`ra samaraliroq bo`lishi mumkin.
with … as konstruksiyasining sintaksisi:
"with" expression ["as" target] ("," expression ["as" target])* ":"
suite
Endi esa, ushbu blokning bajarilisih jarayoni haqida batafsil to`xtalib o`tamiz:
with … as konstruksiyasidagi ko`rsatma bajariladi.
Keyinchalik foydalanish uchun __exit__maxsus metodi yuklanadi.
__enter__ metodi bajariladi. Agar with konstruksiyasining tarkibida as so`zi bor bo`lsa, u holda, __enter__ metodi tomonidan qaytaraladigan qiymat o`zgaruvchiga yoziladi.
suite amalga oshiriladi.
__exit__ metodiga murojaat qilinadi hamda bu yerda suite bajarilganligi yoki noodatiy holat yuzaga kelganligi ahamiyatsizdir. Bu metodga agar noodatiy holat yuzaga kelgan bo`lsa, uning parametrlari, agar u yuzaga kelgan bo`lmasa, barcha argumentlarda None qiymati beriladi.
with A() as a, B() as b:
suite
Agar with … as konstruksiyasining tarkibida bir nechta ko`rsatmalar keltirilgan bo`lsa, u holda, ular bir nechta ichma-ich joylashtirilgan ko`rsatmalar bilan teng kuchli hisoblanadi:
hamda
with A() as a:
with B() as b:
suite
dastur qismlari o`zaro ekvivalent (teng kuchli) hisoblanadi.
with … as konstruksiyasi nima uchun qo`llaniladi? Bajarilishi o`ta muhim bo`lgan funksiyalar har qanday holatda ham kafolatlangan tarzda bajarilishini nazorat qilish uchun. Ushbu konstruksiyadan foydalanishning eng keng tarqalgan holatlaridan biri – bu fayllarni ochish jarayonidir. Biz oldingi boblarimizda open funksiyasi yordamida fayllarni ochish jarayoni bilan tanishgan edik, lekin with … as konstruksiyasi bu amal uchun ko`proq qo`llailadigan konstruksiya bo`lib, undan foydalanilganda har qanday holatda ham yakunda faylning yopilishini kafolatlashi bilan farq qiladi.
with open('newfile.txt', 'w', encoding='utf-8') as g:
d = int(input())
print('1 / {} = {} '.format(d, 1 / d), file=g)
Masalan:
Va bu holatda siz foydalanuvhci tomonidan nima kiritilgan taqdirda ham faylning yakunda aniq yopilishiga shubha qilmasangiz ham bo`ladi.
25-bob
Dostları ilə paylaş: |