Özet - Context manager'lar
- Python kursu
- Orta seviye
- Ders 111/116
- 5 dk
@contextmanager ve ExitStack'i birleştirerek bir kaynak havuzu yazarsın.
Özet - Context manager'lar
Bu grupta beş temel kavram öğrendin:
- with — kaynağı otomatik kapatır
- __enter__/__exit__ — sınıf tabanlı context manager
- @contextmanager — fonksiyon tabanlı context manager
- exception yakalama — __exit__ ile hata bastırma
- ExitStack — dinamik çoklu yönetim
Şimdi bunları bir araya getiren iki kısa görev yapacaksın: birincisi sınıf tabanlı CM, ikincisi @contextmanager.
Uygulama Sınıf tabanlı context manager
class Log: tanımla. __enter__'da print("aç") ve return self yaz. __exit__'te print("kapat") yaz. with Log(): bloğu içinde print("çalışıyor") yaz.
Başlangıç kodu
# Log sınıfını context manager yap
# with ile kullanÖrnek çözüm
class Log:
def __enter__(self):
print("aç")
return self
def __exit__(self, *a):
print("kapat")
with Log():
print("çalışıyor")Beklenen çıktı
aç çalışıyor kapat
Uygulama @contextmanager ile blok
from contextlib import contextmanager yaz. @contextmanager ile def blok(): tanımla. Gövdede print("başla"), yield, print("bitir") yaz. with blok(): içinde print("içeride") yaz.
Başlangıç kodu
# contextlib'den contextmanager al
# blok fonksiyonunu CM yap ve kullanÖrnek çözüm
from contextlib import contextmanager
@contextmanager
def blok():
print("başla")
yield
print("bitir")
with blok():
print("içeride")Beklenen çıktı
başla içeride bitir
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hangisi context manager yazmanın en kısa yoludur?
- Sınıf + __enter__/__exit__
- try/finally
- ExitStack
- @contextmanager + yield Doğru cevap
Açıklama: @contextmanager bir fonksiyonla CM yapar; sınıf yazmaya gerek yok.
2 Context manager kavramlarını eşleştir
| Kavram | Anlamı |
|---|---|
with |
Bloğu başlatır |
__enter__ |
Açılış |
__exit__ |
Kapanış |
yield |
CM'de bölme |