Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Einführung in Dekoratoren | Decorators
Fortgeschrittene Python-Techniken
course content

Kursinhalt

Fortgeschrittene Python-Techniken

Fortgeschrittene Python-Techniken

1. Packen und Entpacken
2. Argumente in Funktionen
3. Funktion als Argument
4. Variablenbereich
5. Decorators

book
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:

123456789101112131415161718192021
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))
copy

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:

  1. Eine Funktion als Argument nehmen.
  2. Diese Funktion innerhalb einer neu definierten Funktion (Wrapper) umschließen.
  3. 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.

  1. 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.
  2. Als nächstes wird die Funktion add definiert. Wie der Dekorator wird auch diese Funktion noch nicht ausgeführt, sondern nur definiert.
  3. 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 des decorator wird der wrapper definiert und dann zurückgegeben. Jetzt bezieht sich add nicht mehr auf die ursprüngliche add-Funktion, sondern auf die wrapper-Funktion, die vom decorator zurückgegeben wird.
  4. 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.

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 5. Kapitel 1
We're sorry to hear that something went wrong. What happened?
some-alt