Grundlagen von Python Decoratoren

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Decoratoren in Python ermöglichen es Ihnen, das Verhalten einer Funktion, Klasse oder Methode zu modifizieren oder zu verbessern. Sie sind eine Möglichkeit, die Funktionalität Ihres Codes dynamisch zu verändern, ohne den Quellcode zu ändern. In diesem Lab werden wir die Grundlagen von Decoratoren erkunden und lernen, wie Sie sie verwenden, um Funktionalität Ihrem Code hinzuzufügen.

Das Verständnis von Decoratoren

Beginnen wir mit einem einfachen Beispiel. Öffnen Sie eine neue Python-Interpreter-Sitzung:

python3

Wir haben eine Funktion, die das Quadrat einer Zahl berechnet:

def square(x):
    return x**2

Nehmen wir an, dass wir der square-Funktion eine Funktion hinzufügen möchten, die jedes Mal, wenn die Funktion aufgerufen wird, die Eingabe und Ausgabe der Funktion protokolliert. Wir können dies mit einem Decorator tun.

Hier ist der Code für den logger-Decorator:

def logger(func):
    def wrapper(x):
        print("Funktion wird aufgerufen:", func.__name__)
        print("Eingabe:", x)
        result = func(x)
        print("Ausgabe:", result)
        return result
    return wrapper

Jetzt können wir diesen Decorator verwenden, um die square-Funktion zu erweitern:

@logger
def square(x):
    return x**2

Wenn wir square(5) aufrufen, wird die Ausgabe sein:

Funktion wird aufgerufen: square
Eingabe: 5
Ausgabe: 25

Wie Sie sehen können, hat der Decorator der square-Funktion die gewünschte Funktionalität hinzugefügt, ohne ihren Quellcode zu ändern.

Decoratoren mit Parametern

Decoratoren können auch Parameter akzeptieren. Beispielsweise könnten wir den logger-Decorator so modifizieren, dass er eine Nachricht annimmt, die vor den Eingabe- und Ausgabeprotokollen gedruckt werden soll.

def logger(message):
    def decorator(func):
        def wrapper(x):
            print(message)
            print("Funktion wird aufgerufen:", func.__name__)
            print("Eingabe:", x)
            result = func(x)
            print("Ausgabe:", result)
            return result
        return wrapper
    return decorator

Jetzt können wir diesen aktualisierten Decorator verwenden, um die square-Funktion zu erweitern:

@logger("Dies ist eine benutzerdefinierte Nachricht")
def square(x):
    return x**2

Wenn wir square(5) aufrufen, wird die Ausgabe sein:

Dies ist eine benutzerdefinierte Nachricht
Funktion wird aufgerufen: square
Eingabe: 5
Ausgabe: 25

Das Verwenden mehrerer Decoratoren

Sie können auch mehrere Decoratoren übereinanderstapeln, um mehrere Funktionsstufen hinzuzufügen. Beispielsweise erstellen wir einen neuen Decorator namens timer, der misst, wie lange eine Funktion zum Ausführen braucht:

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print("Zeitverbrauch:", end_time - start_time)
        return result
    return wrapper

Jetzt verwenden wir sowohl den logger- als auch den timer-Decorator auf der square-Funktion:

@logger("Dies ist eine benutzerdefinierte Nachricht")
@timer
def square(x):
    return x**2

Wenn wir square(5) aufrufen, wird die Ausgabe sein:

Dies ist eine benutzerdefinierte Nachricht
Funktion wird aufgerufen: square
Eingabe: 5
Ausgabe: 25
Zeitverbrauch: 0.000001

Wie Sie sehen können, hat der timer-Decorator der square-Funktion die Zeitverbrauchsinformation hinzugefügt, während der logger-Decorator die Eingabe- und Ausgabeprotokolle sowie die benutzerdefinierte Nachricht hinzugefügt hat.

Zusammenfassung

In diesem Lab haben wir die Grundlagen von Decoratoren in Python gelernt. Wir haben gesehen, wie man Decoratoren verwendet, um das Verhalten einer Funktion, Klasse oder Methode zu modifizieren, und wie man mehrere Decoratoren verwendet, um mehrere Funktionsstufen hinzuzufügen. Wir haben auch gesehen, wie man Decoratoren mit Parametern verwendet, um benutzerdefinierte Funktionalität hinzuzufügen.

Mit diesen Fähigkeiten können Sie jetzt beginnen, Decoratoren in Ihren Code zu integrieren, um Ihr Leben als Entwickler einfacher zu gestalten!