Zum Hauptinhalt springen

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

Mini-QuizWas ist @logge vor def f?

@ sitzt! Als Nächstes: Dekoratoren mit Argumenten (einfach gehalten).