Das Verständnis von Decoratoren
Beginnen wir mit einem einfachen Beispiel. Öffnen Sie eine neue Python-Interpreter-Sitzung:
python3
Wir haben eine Funktion, die das Quadrat einer Zahl berechnet:
def square(x):
return x**2
Nehmen wir an, dass wir der square
-Funktion eine Funktion hinzufügen möchten, die jedes Mal, wenn die Funktion aufgerufen wird, die Eingabe und Ausgabe der Funktion protokolliert. Wir können dies mit einem Decorator tun.
Hier ist der Code für den logger
-Decorator:
def logger(func):
def wrapper(x):
print("Funktion wird aufgerufen:", func.__name__)
print("Eingabe:", x)
result = func(x)
print("Ausgabe:", result)
return result
return wrapper
Jetzt können wir diesen Decorator verwenden, um die square
-Funktion zu erweitern:
@logger
def square(x):
return x**2
Wenn wir square(5)
aufrufen, wird die Ausgabe sein:
Funktion wird aufgerufen: square
Eingabe: 5
Ausgabe: 25
Wie Sie sehen können, hat der Decorator der square
-Funktion die gewünschte Funktionalität hinzugefügt, ohne ihren Quellcode zu ändern.