Ein einfacher Dekorator
Idee
Ein Dekorator wickelt eine Funktion in Extra-Verhalten.
def logge(fn):
def wrapper(*args, **kwargs):
print("Starte", fn.__name__)
ergebnis = fn(*args, **kwargs)
print("Fertig", fn.__name__)
return ergebnis
return wrapper
@logge
def add(a, b):
return a + b
print(add(2, 3))
@logge ist kurz für add = logge(add).
Rate mal!
Wann erscheint „Starte“?
Auflösung
Vor dem eigentlichen add-Aufruf.
Probiere es selbst
Experiment 1
logge auf eine print-Funktion.
Experiment 2
Zwei Funktionen dekorieren.
Experiment 3
Ohne @ manuell f = logge(f).
Übungen
Level 1
Dekorator der „Hallo“ davor printet.
Level 2
Zeit messen grob mit time (nächstes Projekt).
Level 3
wrapper gibt Ergebnis zurück (nicht vergessen!).
Level-1-Lösung
def davor(fn):
def wrapper(*args, **kwargs):
print("Hallo")
return fn(*args, **kwargs)
return wrapper
Mini-Quiz
@ sitzt! Als Nächstes: Dekoratoren mit Argumenten (einfach gehalten).