Kursinhalt
Fortgeschrittene Python-Techniken
Fortgeschrittene Python-Techniken
Dekoratoren Verketten
Verkettung von Dekoratoren in Python ist eine leistungsstarke Funktion, die es Ihnen ermöglicht, mehrere Dekoratoren auf eine einzelne Funktion anzuwenden. Jeder Dekorator modifiziert oder verbessert die Funktion auf irgendeine Weise, und sie werden in einer bestimmten Reihenfolge angewendet. Hier ist ein praktisches Beispiel, um die Verkettung von Dekoratoren zu veranschaulichen:
Zwei einfache Dekoratoren
Zuerst definieren wir zwei einfache Dekoratoren:
Verkettung von Dekoratoren
Nun, lassen Sie uns diese Dekoratoren auf eine einzelne Funktion anwenden:
def decorator_one(func): def wrapper(): print("Decorator one start") func() print("Decorator one end") return wrapper def decorator_two(func): def wrapper(): print("Decorator two start") func() print("Decorator two end") return wrapper @decorator_one @decorator_two def greet(): print("Hello!") greet()
In jedem Dekorator gibt es Code, der ausgeführt wird, bevor zum nächsten Dekorator übergegangen wird und nach Abschluss dieses Dekorators. Es funktioniert in einer geschichteten Weise. Sie werden in der Reihenfolge angewendet, in der sie aufgelistet sind, von oben nach unten. Die Ausgabe des oberen Dekorators wird zur Eingabe für den nächsten darunter. Diese Schichtung kann der ursprünglichen Funktion mehrere Funktionalitäten hinzufügen.
Ausführungsreihenfolge
Wenn greet()
aufgerufen wird, ist die Ausführungsreihenfolge:
- Vom
decorator_one
wird der erste print ausgeführt; - Innerhalb von
decorator_one
wird vomdecorator_two
der erste print ausgeführt; - Schließlich wird die ursprüngliche
greet
-Funktion ausgeführt; - Dann rückwärts gehen und die Ausführung des
decorator_two
durch Drucken der Nachricht beenden; - Der gesamte Code wird abgeschlossen, indem die letzte print-Anweisung im
decorator_one
ausgeführt wird.
Die Ausgabe wird sein:
Dekoratoren verketten ist eine leistungsstarke Methode, um das Verhalten von Funktionen auf eine modulare und lesbare Weise zu erweitern.
Ich hoffe, die nächste Herausforderung hilft Ihnen, dieses Thema besser zu verstehen.
Danke für Ihr Feedback!