Einführung
Python-Dekoratoren sind ein mächtiges Werkzeug, das es erlaubt, das Verhalten von Funktionen zu erweitern und zu verändern, ohne ihren Code permanent zu verändern. Sie bieten eine saubere und ausdrucksstarke Möglichkeit, Funktionalität zu Ihren Funktionen hinzuzufügen, was Ihren Code modularer und einfacher zu pflegen macht.
In diesem Tutorial werden wir das Konzept der Dekoratoren erklären, Ihnen zeigen wie sie funktionieren, und praktische Beispiele liefern, die Ihnen helfen, Dekoratoren in Ihre eigenen Projekte einzubauen.
Was sind Dekoratoren?
Ein Dekorator in Python ist eine Funktion, die eine andere Funktion als Argument annimmt, sie um einige Funktionen erweitert und eine neue Funktion zurückgibt. Dekoratoren werden oft verwendet für:
- Protokollierung: Aufzeichnen, wenn Funktionen aufgerufen werden.
- Zugriffskontrolle: Überprüfen von Berechtigungen vor der Ausführung einer Funktion.
- Caching: Speichern von Ergebnissen teurer Funktionsaufrufe.
- Timing: Messung der Ausführungszeit von Funktionen.
Wie Dekoratoren funktionieren
Wenn Sie einen Dekorator auf eine Funktion mit der @decorator_name
Syntax anwenden, übergibt Python die dekorierte Funktion an den Dekorator. Der Dekorator gibt dann eine neue Funktion zurück, die das Verhalten der ursprünglichen Funktion verbessert oder modifiziert.
Grundlegendes Decorator-Beispiel
Unten ist ein einfaches Beispiel, das zeigt, wie man einen Dekorator erstellt und verwendet, um Verhalten vor und nach einem Funktionsaufruf hinzuzufügen.
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Vor dem Funktionsaufruf")
= func(*args, **kwargs)
result print("Nach dem Funktionsaufruf")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
"Alice") say_hello(
Ergebnisse:
Vor dem Funktionsaufruf
Hallo, Alice!
Nach dem Funktionsaufruf
Fortgeschrittenes Beispiel: Decorator mit Argumenten
Dekoratoren können auch so gestaltet werden, dass sie Argumente akzeptieren, was noch flexiblere Verhaltensänderungen ermöglicht.
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(n):
print(f"Wiederholen Sie die Grüße {i+1}/{n}:")
= func(*args, **kwargs)
result return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello, {name}!")
"Bob") greet(
Ergebnisse:
Wiederholen Sie die Grüße 1/3:
Hallo, Bob!
Wiederholen Sie die Grüße 2/3:
Hallo, Bob!
Wiederholen Sie die Grüße 3/3:
Hallo, Bob!
Beste Praktiken für die Verwendung von Dekoratoren
Einfach halten:
Schreiben Sie kleine, fokussierte Dekoratoren, die eine Sache gut machen.functools.wraps verwenden:
Wenn Sie Dekoratoren schreiben, verwenden Siefunctools.wraps
, um die Metadaten der ursprünglichen Funktion zu erhalten.import functools def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): print("Vor dem Funktionsaufruf") = func(*args, **kwargs) result print("Nach dem Funktionsaufruf") return result return wrapper
Dokumentieren Sie Ihre Dekoratoren:
Klarer Kommentar und Dokumentation des Zwecks und der Verwendung jedes Dekorators.
Schlussfolgerung
Dekoratoren in Python bieten eine flexible und elegante Möglichkeit, das Verhalten von Funktionen zu verändern. Wenn man Dekoratoren beherrscht, kann man mehr modularen und wiederverwendbaren Code schreiben, die Funktionalität ohne Code-Duplizierung verbessern und übergreifende Belange wie Logging und Fehlerbehandlung sauberer implementieren. Experimentieren Sie mit den hier aufgeführten Beispielen und versuchen Sie, Ihre eigenen Dekoratoren zu erstellen, um zu sehen, wie sie Ihre Codierungsaufgaben vereinfachen können.
Weiterführende Literatur
- Python für Anfänger: Ihr erstes Skript
- Syntax und Variablen in Python
- Funktionale Programmierung in Python
Viel Spaß beim Programmieren, und viel Spaß beim Erweitern Ihrer Funktionen mit Dekoratoren!
Weitere Artikel erkunden
Hier finden Sie weitere Artikel aus derselben Kategorie, die Ihnen helfen, tiefer in das Thema einzutauchen.
Wiederverwendung
Zitat
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Python Dekoratoren mit Beispielen erklärt},
date = {2024-02-05},
url = {https://www.datanovia.com/de/learn/programming/python/advanced/decorators-explained.html},
langid = {de}
}