Zum Hauptinhalt springen

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

Mini-QuizWas markiert den with-Block im Generator-Manager?

with sitzt! Mini-Projekt: Messwerkzeuge.