Eigene Kontextmanager
with kennst du
with open("x.txt", "w", encoding="utf-8") as f:
f.write("hi")
Start und Aufräumen passieren automatisch.
Mit Generator + contextmanager
from contextlib import contextmanager
@contextmanager
def begruessung():
print("Start")
yield
print("Ende")
with begruessung():
print("Arbeit")
Ausgabe: Start → Arbeit → Ende.
Rate mal!
Läuft „Ende“ auch bei Fehler in Arbeit (typisch ja, ähnlich finally)?
Auflösung
Bei sauber gebauten Managern ja – Aufräumen ist der Sinn.
Probiere es selbst
Experiment 1
begruessung nachbauen.
Experiment 2
timer-Skizze (time.time vor/nach yield).
Experiment 3
with zwei Mal nutzen.
Übungen
Level 1
Kontextmanager der „open/close“ printet.
Level 2
timer grob.
Level 3
Erkläre Unterschied zu Dekorator.
Level-2-Idee
import time
from contextlib import contextmanager
@contextmanager
def timer():
start = time.time()
yield
print("Dauer:", time.time() - start)
Mini-Quiz
with sitzt! Mini-Projekt: Messwerkzeuge.