CodeBlanks Logo Icon CodeBlanks

Özet - Context manager'lar

@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

main.py
# Log sınıfını context manager yap
# with ile kullan

Örnek çözüm

main.py
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

main.py
# contextlib'den contextmanager al
# blok fonksiyonunu CM yap ve kullan

Örnek çözüm

main.py
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

Orta seviye bölümündeki tüm dersler