Python'da kontekst menejer (with)

Fayl o’qish darsida with blokini ishlatgandik — u faylni avtomatik yopardi. Aslida with umumiy mexanizm: u kontekst menejer deb ataladi. Bu darsda uning ishlashini ochamiz.

Muammo: resursni yopishni unutish

Fayl, tarmoq ulanishi yoki baza — bular ochilgach, yopilishi kerak. Qo’lda yopishni unutish oson:

fayl = open("data.txt")
matn = fayl.read()
# fayl.close() ni unutdik — resurs ochiq qoldi

Ochiq qolgan resurs — muammo manbai: ma’lumot to’liq saqlanmaydi yoki tizim resurslari tugaydi.

Yechim: with bloki

with bloki resursni avtomatik yopadi — hatto ichida xato bo’lsa ham:

Python

Blok tugashi bilan (yoki xato chiqishi bilan) with faylni o’zi yopadi. Yopishni unutib bo’lmaydi.

O’z kontekst menejeringiz

Klassga __enter__ (kirish) va __exit__ (chiqish) metodlarini qo’shib, uni with bilan ishlatish mumkin:

Python

Amaliy mashq

with ni sinab ko’ring:

  1. Faylni with bilan oching va bir qator yozing;
  2. blokdan chiqqach faylning yopilganini tekshiring;
  3. xuddi shuni with siz qiling va close() ni ataylab unuting;
  4. __enter__ va __exit__ metodlari bo’lgan klass yozing;
  5. uni with bilan ishlatib, ikkala metod qachon chaqirilishini kuzating.

with bloki ichida xato yuz bersa, __exit__ baribir ishlaydimi?

Qisqacha xulosa

  • Kontekst menejer resursni avtomatik ochib-yopadi (with bilan).
  • with blok tugagach resursni o’zi yopadi — xato bo’lganda ham.
  • Fayl, baza, tarmoq ulanishi uchun ishlatiladi.
  • O’z menejerini __enter__ va __exit__ metodlari bilan yasash mumkin.
  • with kodni toza va xavfsiz qiladi — yopishni unutib bo’lmaydi.

Keyingi darsda tip izohlari (typing) — kod turlarini aniq ko’rsatishni ko’ramiz.

Bu dars foydali bo'ldimi?

marta ko'rildi