Python-Dekoratoren: Mehr Verständnis für die Funktionserweiterung

Linda Hamilton
Freigeben: 2024-11-19 22:09:02
Original
963 Leute haben es durchsucht

Python Decorators: More Understanding into Functionality Enhancement

Gehen wir über die Grundlagen hinaus, um Dekorateure eingehend zu verstehen. Bei Dekoratoren geht es nicht nur um „zusätzliche Ebenen“, sondern sie bieten eine raffinierte Möglichkeit, Funktionen dynamisch um Funktionalität zu erweitern, wodurch sie äußerst anpassungsfähig und leistungsstark werden.


1. Was ist ein Dekorateur?

Im Wesentlichen ist ein Dekorator eine Funktion höherer Ordnung – eine Funktion, die eine andere Funktion als Argument akzeptiert, Funktionalität hinzufügt und eine neue Funktion zurückgibt. Dies ermöglicht es uns, eine ursprüngliche Funktion mit zusätzlichen Funktionen zu „dekorieren“, wobei die ursprüngliche Funktion unverändert bleibt.

Syntax-Zusammenfassung:

@decorator_name
def my_function():
    pass
Nach dem Login kopieren
Nach dem Login kopieren

Die Verwendung von @decorator_name vor my_function ist eine Abkürzung für:

my_function = decorator_name(my_function)
Nach dem Login kopieren

2. Erstellen eines einfachen Dekorators

Lassen Sie uns einen einfachen Dekorator konstruieren, der protokolliert, wenn eine Funktion aufgerufen wird.

def log_call(func):
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        return func(*args, **kwargs)
    return wrapper

@log_call
def greet(name):
    print(f"Hello, {name}!")

greet("Alice")  # Outputs: Calling greet, then Hello, Alice!
Nach dem Login kopieren
  • log_call ist ein Dekorator, der Begrüßungen umschließt.
  • *args und `kwargs`** stellen sicher, dass es mit einer beliebigen Anzahl von Positions- oder Schlüsselwortargumenten funktioniert.

3. Anwendungsfälle aus der Praxis

Dekorateure werden häufig verwendet für:

  • Zugriffskontrolle: z. B. Überprüfung von Benutzerberechtigungen.
  • Caching: Speichern der Ergebnisse teurer Funktionsaufrufe.
  • Wiederholungsmechanismen: Automatisches Wiederholen einer Funktion bei einem Fehler.
  • Eingabevalidierung: Argumente prüfen, bevor eine Funktion ausgeführt wird.

4. Dekorateure mit Argumenten

Manchmal benötigen Dekorateure zusätzliche Parameter. In diesen Fällen fügen wir eine äußere Funktion hinzu, um Parameter an den Dekorator zu übergeben.

Beispiel:

def repeat(times):
    def decorator(func):
        def wrapper(*args, **kwargs):
            for _ in range(times):
                func(*args, **kwargs)
        return wrapper
    return decorator

@repeat(3)
def say_hello():
    print("Hello!")

say_hello()  # Outputs "Hello!" three times
Nach dem Login kopieren

Hier ist „repeat“ eine Dekoratorfabrik, die einen Dekorator basierend auf dem Zeitargument generiert.


5. Stapelnde Dekoratoren

Sie können mehrere Dekoratoren auf einer einzigen Funktion stapeln und so eine leistungsstarke Kette von Verhaltensweisen erstellen.

Beispiel:

def make_bold(func):
    def wrapper():
        return "<b>" + func() + "</b>"
    return wrapper

def make_italic(func):
    def wrapper():
        return "<i>" + func() + "</i>"
    return wrapper

@make_bold
@make_italic
def greet():
    return "Hello!"

print(greet())  # Outputs: <b><i>Hello!</i></b>
Nach dem Login kopieren

Stapelung von @make_bold- und @make_italic-Umbrüchen in fetten und kursiven Tags.


6. Metadaten mit functools.wraps bewahren

Beim Dekorieren von Funktionen möchten Sie häufig, dass die Metadaten der ursprünglichen Funktion (wie Name und Dokumentzeichenfolge) erhalten bleiben. Verwenden Sie functools.wraps, um sicherzustellen, dass Ihr Wrapper diese Details nicht überschreibt.

from functools import wraps

def log_call(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        print(f"Calling {func.__name__}")
        return func(*args, **kwargs)
    return wrapper
Nach dem Login kopieren

@wraps(func) stellt sicher, dass der Name und die Dokumentzeichenfolge von func beibehalten werden.


7. Dekorateure im Unterricht

Dekoratoren sind nicht nur für eigenständige Funktionen da; Sie können auch mit Klassenmethoden verwendet werden.

Beispiel:

@decorator_name
def my_function():
    pass
Nach dem Login kopieren
Nach dem Login kopieren

Der require_auth-Dekorator prüft, ob der Benutzer authentifiziert ist, bevor er Zugriff auf die access_dashboard-Methode gewährt.


Fazit: Optimieren Sie Ihren Code mit Dekoratoren

Dekoratoren sind ein unschätzbar wertvoller Bestandteil von Python und ermöglichen es Ihnen, das Funktionsverhalten auf flexible und wiederverwendbare Weise zu verbessern, zu ändern und zu steuern. Sie machen Ihren Code ausdrucksvoller, modularer und eleganter. Mit Dekoratoren fügen Sie nicht nur Funktionalität hinzu – Sie verfeinern und bereichern Ihre Codebasis.

Das obige ist der detaillierte Inhalt vonPython-Dekoratoren: Mehr Verständnis für die Funktionserweiterung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage