Heim > Backend-Entwicklung > Python-Tutorial > Was sind Dekorateure in Python? Wie erstellen Sie einen?

Was sind Dekorateure in Python? Wie erstellen Sie einen?

James Robert Taylor
Freigeben: 2025-03-19 11:54:34
Original
467 Leute haben es durchsucht

Was sind Dekorateure in Python? Wie erstellen Sie einen?

Dekorateure in Python sind eine leistungsstarke und elegante Möglichkeit, das Verhalten von Funktionen oder Klassen zu ändern oder zu verbessern, ohne ihren Quellcode direkt zu ändern. Es handelt sich im Wesentlichen um Funktionen, die eine andere Funktion als Argument betrachten und ihr Verhalten erweitern oder ändern. Mit Dekoratoren können Sie eine andere Funktion einwickeln, um den Code vor und nach der Ausführung der verpackten Funktion auszuführen.

Um einen Dekorateur zu erstellen, können Sie folgende Schritte befolgen:

  1. Definieren Sie die Dekorationsfunktion : Schreiben Sie eine Funktion, die eine andere Funktion als Argument nimmt.
  2. Definieren Sie die Wrapper -Funktion : Definieren Sie in der Dekoratorfunktion eine Wrapper -Funktion, die sich um die ursprüngliche Funktion wickelt.
  3. Führen Sie die umwickelte Funktion aus : Die Wrapper -Funktion sollte die ursprüngliche Funktion aufrufen und auch vor und nach dem Anruf zusätzlichen Code ausführen.
  4. Geben Sie den Wrapper zurück : Die Dekorationsfunktion sollte die Wrapper -Funktion zurückgeben.

Hier ist ein Beispiel dafür, wie man einen einfachen Dekorateur erstellt:

 <code class="python">def my_decorator(func): def wrapper(): print("Something is happening before the function is called.") func() print("Something is happening after the function is called.") return wrapper @my_decorator def say_hello(): print("Hello!") say_hello()</code>
Nach dem Login kopieren

In diesem Beispiel ist my_decorator der Dekorateur, und say_hello ist die Funktion, die dekoriert wird. Wenn say_hello aufgerufen wird, wird der Code in der wrapper -Funktion ausgeführt.

Welche Vorteile bieten Dekoratoren in Python -Programmierung?

Dekorateure bieten mehrere wichtige Vorteile bei der Python -Programmierung:

  1. Wiederverwendbarkeit von Code : Dekoratoren ermöglichen es Ihnen, die gleichen Änderungen oder Verbesserungen auf mehrere Funktionen anzuwenden, ohne den Code zu wiederholen. Dies fördert das trockene Prinzip (nicht wiederholen).
  2. Trennung von Bedenken : Durch die Trennung der Kernlogik einer Funktion von zusätzlichen Funktionen (z. B. Protokollierung, Timing oder Authentifizierung) helfen Dekoratoren, sauberen und fokussierten Code aufrechtzuerhalten.
  3. Leichtigkeit der Wartung : Da Dekorateure extern auf Funktionen aufgetragen werden, können Änderungen an den Dekorateur vorgenommen werden, ohne die dekorierte Funktion zu verändern und die Wartung zu erleichtern.
  4. Flexibilität und Erweiterbarkeit : Dekorateure können gestapelt werden (mehrere Dekorateure, die auf dieselbe Funktion angewendet werden) und können auch parametrisiert werden, was hochflexible Verbesserungen ermöglicht.
  5. Lesbarkeit und Einfachheit : Die @decorator -Syntax ist klar und präzise, ​​wodurch der Code leichter zu lesen und zu verstehen ist.
  6. Aspekt-orientierte Programmierung : Dekorateure erleichtern die Implementierung von Übergreifenden Bedenken wie Protokollierung, Leistungsüberwachung und Sicherheitskontrollen, die für mehrere Funktionen gemeinsam sind.

Wie können Sie Dekorateure verwenden, um das Verhalten von Funktionen zu ändern?

Dekorateure können verwendet werden, um das Verhalten von Funktionen auf verschiedene Weise zu ändern. Hier sind einige allgemeine Anwendungen:

  1. Protokollierung : Dekorateure können Funktionen, Eingänge, Ausgänge und Ausführungszeiten für Debugging- und Überwachungszwecke protokollieren.

     <code class="python">def log_decorator(func): def wrapper(*args, **kwargs): print(f"Calling {func.__name__}") result = func(*args, **kwargs) print(f"{func.__name__} finished execution") return result return wrapper @log_decorator def add(a, b): return ab</code>
    Nach dem Login kopieren
  2. Timing : Sie können Dekoratoren verwenden, um die Ausführungszeit der Funktionen zu messen, was für die Leistungsoptimierung nützlich ist.

     <code class="python">import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} took {end_time - start_time} seconds to run.") return result return wrapper @timer_decorator def slow_function(): time.sleep(2) print("Slow function executed")</code>
    Nach dem Login kopieren
  3. Authentifizierung und Autorisierung : Dekorateure können verwendet werden, um zu überprüfen, ob ein Benutzer authentifiziert ist, bevor er Zugriff auf bestimmte Funktionen zulässt.

     <code class="python">def requires_auth(func): def wrapper(*args, **kwargs): if not authenticated: raise PermissionError("Authentication required") return func(*args, **kwargs) return wrapper @requires_auth def protected_function(): print("This function is protected")</code>
    Nach dem Login kopieren
  4. Memoisierung : Dekorateure können die Ergebnisse teurer Funktionsaufrufe zwischenspeichern, um die Leistung zu verbessern.

     <code class="python">def memoize(func): cache = {} def wrapper(*args): if args in cache: return cache[args] result = func(*args) cache[args] = result return result return wrapper @memoize def fibonacci(n): if n </code>
    Nach dem Login kopieren

Können Sie ein praktisches Beispiel für die Implementierung eines Dekorateurs in Python erklären?

Betrachten wir ein praktisches Beispiel für die Implementierung eines Dekorateurs für das Zwischenspeichernergebnisse, das die Leistung rechenintensiver Funktionen erheblich verbessern kann. Wir werden eine Fibonacci -Funktion verwenden, um dies zu demonstrieren:

 <code class="python">def memoize(func): cache = {} def wrapper(*args): if args in cache: print(f"Returning cached result for {args}") return cache[args] result = func(*args) cache[args] = result print(f"Caching result for {args}") return result return wrapper @memoize def fibonacci(n): if n </code>
Nach dem Login kopieren

In diesem Beispiel:

  1. Memoize Decorator : Der memoize -Dekorateur behält einen Wörterbuch cache bei, um die Ergebnisse der Funktionsaufrufe zu speichern. Die wrapper -Funktion prüft, ob das Ergebnis für eine bestimmte Argumente bereits im Cache liegt. Wenn dies der Fall ist, gibt es das zwischengespeicherte Ergebnis zurück; Ansonsten berechnet es das Ergebnis, rehrt es aus und gibt es dann zurück.
  2. Fibonacci -Funktion : Die fibonacci -Funktion berechnet die Fibonacci -Zahlen rekursiv. Ohne Memoisierung würde dies zu vielen redundanten Berechnungen führen, insbesondere für größere Zahlen. Der auf fibonacci angewandte @memoize -Dekorator stellt sicher, dass jede Fibonacci -Zahl nur einmal berechnet und für nachfolgende Anrufe wiederverwendet wird.
  3. Ausführung : Wenn fibonacci(10) zum ersten Mal aufgerufen wird, berechnet und rechnet der Dekorateur das Ergebnis. Beim zweiten Anruf nach fibonacci(10) wird das Ergebnis aus dem Cache abgerufen und die Leistungsverbesserung demonstriert.

Dieses Beispiel zeigt, wie Dekorateure verwendet werden können, um die Leistung von Funktionen durch Memoisierung zu verbessern. Dies ist eine gemeinsame Technik bei der Optimierung und dynamischen Programmierszenarien.

Das obige ist der detaillierte Inhalt vonWas sind Dekorateure in Python? Wie erstellen Sie einen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage