Kursinhalt
Fortgeschrittene Python-Techniken
Fortgeschrittene Python-Techniken
Einführung in Dekoratoren
Lassen Sie uns über Dekoratoren sprechen.
Beachten Sie, dass decorators
ein herausforderndes Thema für Anfänger sein können. Wir werden Dekoratoren im Detail untersuchen, Schritt für Schritt, und erklären, wie sie funktionieren. Es könnte anfangs schwierig sein, sie zu verstehen. Sind Sie bereit, diese Herausforderungen anzugehen? Deshalb sind Sie hier!
Decorators
sind Funktionen, die einer anderen Funktion zusätzliche Funktionalität hinzufügen, indem sie Closures nutzen. Hier ist ein Beispiel, wie ein Dekorator funktioniert:
def decorator(func): def wrapper(argument1, argument2): print("Function starts executing") result = func(argument1, argument2) print("Function ends executing") return result return wrapper def add(a, b): print(f"Function add: {a} + {b}") return a + b add = decorator(add) print(add(14, 12)) print(add(11, 28)) print(add(33, 16))
In diesem Beispiel nimmt die Funktion decorator()
eine andere Funktion als Argument, definiert eine wrapper()
-Funktion, umschließt die gegebene Funktion innerhalb von wrapper()
und gibt wrapper()
zurück. Es gibt drei Schritte im Betrieb eines Dekorators:
- Eine Funktion als Argument nehmen.
- Diese Funktion innerhalb einer neu definierten Funktion (Wrapper) umschließen.
- Die Wrapper-Funktion zurückgeben, die nun die ursprüngliche Funktion umschließt.
Die wrapper()
-Funktion enthält die Hauptlogik des Dekorators und ruft die Funktion mit den gegebenen Parametern auf. Die add()
-Funktion wird durch die von wrapper()
zurückgegebene decorator()
-Funktion neu zugewiesen, die nun die eingeschlossene add()
-Funktion enthält.
- Der Python-Interpreter liest und definiert zuerst die Dekoratorfunktion. Er führt zu diesem Zeitpunkt keinen Code innerhalb des Dekorators aus; er merkt sich nur, dass es eine Funktion namens Dekorator gibt.
- Als nächstes wird die Funktion add definiert. Wie der Dekorator wird auch diese Funktion noch nicht ausgeführt, sondern nur definiert.
- Nach der Definition von add wird die nächste Zeile
add = decorator(add)
ausgeführt. Hier wird die Dekoratorfunktion zum ersten Mal aufgerufen. Sie erhält die Funktion add als Argument. Innerhalb desdecorator
wird derwrapper
definiert und dann zurückgegeben. Jetzt bezieht sichadd
nicht mehr auf die ursprünglicheadd
-Funktion, sondern auf diewrapper
-Funktion, die vomdecorator
zurückgegeben wird. - Wenn
add(14, 12)
ausgeführt wird, wird die wrapper-Funktion mit 14 und 12 aufgerufen.
- wrapper druckt "Funktion beginnt auszuführen"
- Ruft die ursprüngliche add-Funktion mit 14 und 12 auf, die "Funktion add: 14 + 12" druckt und 26 zurückgibt.
- Druckt "Funktion endet auszuführen".
wrapper
gibt 26 zurück, was von print(add(14, 12)) gedruckt wird.
Die nächsten Aufrufe wiederholen die vorherigen Schritte.
Danke für Ihr Feedback!