Dekoratoren mit Argumenten
Beispiel: n-mal ausführen
def wiederhole(n):
def dekorator(fn):
def wrapper(*args, **kwargs):
for _ in range(n):
fn(*args, **kwargs)
return wrapper
return dekorator
@wiederhole(3)
def hi():
print("hi")
hi()
Drei Ebenen: äußere Argumente → Dekorator → wrapper.
Rate mal!
Warum drei def?
Auflösung
Eine Schicht fürs Argument n, eine für die Funktion, eine für den Aufruf.
Probiere es selbst
Experiment 1
wiederhole(2).
Experiment 2
andere n.
Experiment 3
Skizze auf Papier: 3 Schachteln.
Übungen
Level 1
Erkläre die 3 Ebenen.
Level 2
@wiederhole(5) auf print-ähnlich.
Level 3
prefix(text)-Dekorator, der vorher text printet.
Level-3-Idee
def prefix(text):
def dekorator(fn):
def wrapper(*args, **kwargs):
print(text)
return fn(*args, **kwargs)
return wrapper
return dekorator
Mini-Quiz
Fabrik sitzt! Als Nächstes: eigene Kontextmanager.