Zum Hauptinhalt springen

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

Mini-QuizWas liefert wiederhole(3)?

Fabrik sitzt! Als Nächstes: eigene Kontextmanager.