Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Einführung in Dekoratoren | Mastering Python Iterators and Decorators
Funktionale Programmierkonzepte in Python

bookEinführung in Dekoratoren

Swipe um das Menü anzuzeigen

Note
Definition

Ein Decorator in Python ist eine höherwertige Funktion, die eine andere Funktion als Argument übernimmt und eine neue Funktion zurückgibt, die das Verhalten der ursprünglichen Funktion erweitert oder verändert.

Decorator sind ein zentrales Merkmal in Python, das es ermöglicht, das Verhalten von Funktionen oder Methoden zu modifizieren oder zu erweitern, ohne deren Code direkt zu verändern. Im Kern sind Decorator höherwertige Funktionen – sie nehmen eine andere Funktion als Argument, erweitern oder verändern deren Verhalten und geben eine neue Funktion zurück. In Python wird ein Decorator mit dem @-Symbol gefolgt vom Namen des Decorators direkt über der Funktionsdefinition angewendet.

Häufige Anwendungsfälle für Decorator sind:

  • Protokollierung (Logging);
  • Messung der Ausführungszeit von Funktionen;
  • Durchsetzung von Zugriffskontrolle oder Berechtigungen;
  • Memoisierung (Zwischenspeichern von Ergebnissen);
  • Eingabevalidierung.

Decorator ermöglichen es, solche Logik von der eigentlichen Geschäftslogik zu trennen, was zu saubererem und besser wartbarem Code führt. Durch das Beherrschen von Decorators steht ein leistungsfähiges Werkzeug für das Schreiben von wiederverwendbarem und ausdrucksstarkem Python-Code zur Verfügung.

12345678910111213
def simple_decorator(func): def wrapper(*args, **kwargs): print("Before the function call") result = func(*args, **kwargs) print("After the function call") return result return wrapper @simple_decorator def greet(name): print(f"Hello, {name}!") greet("Alice")
copy

Verständnis von *args und kwargs in Funktionsdefinitionen

Beim Schreiben von Dekoratoren und Wrappern ist es oft notwendig, Funktionen zu behandeln, die eine beliebige Anzahl oder Art von Argumenten akzeptieren. Python stellt dafür *args und **kwargs zur Verfügung.

  • *args sammelt alle zusätzlichen Positionsargumente, die an eine Funktion übergeben werden, in einem Tupel;
  • **kwargs sammelt alle zusätzlichen Schlüsselwortargumente in einem Dictionary.

Diese Flexibilität ist für Dekoratoren entscheidend. Ein Dekorator muss in der Lage sein, alle Argumente an die ursprüngliche Funktion weiterzuleiten, unabhängig von deren Anzahl oder Typ. Ohne *args und **kwargs würde der Dekorator nur mit Funktionen mit einer festen Signatur funktionieren, was die Wiederverwendbarkeit einschränkt.

123456789101112
def my_decorator(func): def wrapper(*args, **kwargs): print("Arguments:", args) print("Keyword arguments:", kwargs) return func(*args, **kwargs) return wrapper @my_decorator def example(a, b, greeting="Hello"): print(f"{greeting}, {a} and {b}!") example(1, 2, greeting="Hi")
copy

Dieser Ansatz stellt sicher, dass der Dekorator jede Funktion umschließen kann, wodurch der Code sowohl robust als auch wiederverwendbar wird.

1. Welchen Zweck hat das @-Symbol in Python?

2. Wie verändert ein Decorator das Verhalten einer Funktion?

question mark

Welchen Zweck hat das @-Symbol in Python?

Wählen Sie die richtige Antwort aus

question mark

Wie verändert ein Decorator das Verhalten einer Funktion?

Wählen Sie die richtige Antwort aus

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 4. Kapitel 1

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 4. Kapitel 1
some-alt