Heim >Backend-Entwicklung >Python-Tutorial >Python -Dekoratoren verstehen mit Beispielen

Python -Dekoratoren verstehen mit Beispielen

Lisa Kudrow
Lisa KudrowOriginal
2025-02-19 09:51:10227Durchsuche

Understanding Python Decorators, with Examples

Dieser Artikel hilft Ihnen dabei, das Konzept der Dekorateure in der Python -Programmierung zu verstehen und sie am besten zu verwenden. Wir werden abdecken, wie Python -Dekoratoren sind, wie ihre Syntax aussieht, wie man sie in einem Skript oder einem Framework erkennt und wie man sie selbst anwendet.

Der Funktionsdekorateur in Python ist nur eine Funktion, die eine andere Funktion als Argument nimmt und die Funktion der dekorierten Funktion erweitert, ohne ihre Struktur zu ändern. Der Dekorateur wickelt eine andere Funktion, verbessert sein Verhalten und gibt es dann zurück.

Das Dekorateurkonzept in Python hilft den Code trocken (wiederholen Sie sich nicht). Funktionsdekoratoren vermeiden unnötige Duplikation in der Codebasis, da einige doppelte Code -Snippets zu einem Funktionsdekorator kombiniert werden können. Wenn Sie mit Python in der Entwicklung voranschreiten, können Dekorateure bei der Analyse und Dokumentation helfen. Sie sind auch entscheidend für die Einrichtung von Überprüfung und Laufzeitprüfung.

Im Folgenden gehe ich davon aus, dass Sie ein grundlegendes Verständnis der Python -Funktionen und der Programmierung haben, und Sie haben mindestens Python 3.8 auf Ihrem Gerät installiert.

Schlüsselpunkte

  • Ein Python -Dekorator ist eine Funktion, die eine andere Funktion als Argument nimmt, die seine Funktionalität verbessert, ohne seine Struktur zu ändern. Sie helfen, den Code trocken zu halten (wiederholen Sie sich nicht), indem sie unnötige Duplikationen vermeiden, und können zur Analyse, Protokollierung, Validierung und Laufzeitprüfung verwendet werden.
  • In Python wird eine Dekoratorfunktion durch eine externe Funktion definiert, die Funktionsparameter empfängt, und eine verschachtelte Funktion, die die Dekorationsfunktion innerhalb der externen Funktion umhüllt. Dekorateure sind leicht durch das Präfix "@" vor der Dekorationsfunktion zu identifizieren. Parameter können an die Wrapper -Funktion und dann an die dekorierte Funktion übergeben werden.
  • Dekoratoren können in Python gekettet werden, was bedeutet, dass eine Funktion mit mehreren Dekoratoren dekoriert werden kann. Dies geschieht, indem ein Dekorateur auf einem anderen gestapelt wird. Zu den praktischen Anwendungsfällen für Python-Dekorateure gehören Zeitprotokollierung, Gedächtnis und eingebaute Python-Dekoratoren wie @ClassMethod, @staticMethod und @Property.

Dinge zu wissen, bevor Sie sich mit Python -Dekoratoren befassen

In Python sind Funktionen erstklassige Bürger, was bedeutet, dass sie Parameter empfangen oder als Parameter übergeben werden können. Um das Konzept eines Dekorators vollständig zu erfassen, müssen Sie die folgenden Punkte kennen.

Die Funktion

ist ein Objekt, was bedeutet, dass sie einer anderen Variablen

zugeordnet werden kann
<code class="language-python">def greet():
    print("Hello John")

greet_john = greet
greet_john()
>>>
Hello John</code>

Denken Sie immer daran, dass in Python alles ein Objekt ist. Genauso wie Sie einer Variablen einen Wert zuweisen, kann eine Funktion bei Bedarf auch einer Variablen zugewiesen werden. Dies ist wichtig, wenn Sie etwas über Dekorateure lernen.

Funktion kann

aus einer anderen Funktion zurückgeben
<code class="language-python">def greet():
    def greeting_at_dawn():
        print("Good morning")

    return greeting_at_dawn

salute = greet()
salute()
>>>
Good morning</code>

Innenfunktionen in Python können aus externen Funktionen zurückgegeben werden. Dies ist Teil des funktionalen Programmierkonzepts, dem Sie begegnen werden.

Funktionen können als Parameter einer anderen Funktion

übergeben werden
<code class="language-python">def greet_some(func):
    print("Good morning", end=' ')
    func()

def say_name():
    print("John")

greet_some(say_name)
>>>
Good morning John</code>

Die Funktion, die Funktionsparameter empfängt, wird als Funktion höherer Ordnung bezeichnet.

Achten Sie darauf, dass Sie die oben genannten Punkte berücksichtigen, wenn Sie lernen, Dekorateure zu implementieren und in Python -Programmen effektiv zu verwenden.

Python Decorator Betriebsmechanismus

Eine einfache Dekorationsfunktion beginnt mit Funktionsdefinition, Dekorateurfunktion und dann verschachtelter Funktionen in externen Wrapper -Funktionen.

Beachten Sie immer die folgenden zwei Punkte, wenn Sie einen Dekorateur definieren:

  1. Um einen Dekorateur zu implementieren, definieren Sie eine externe Funktion, die Funktionsparameter empfängt.
  2. NEST Eine Wrapper -Funktion in der externen Dekorationsfunktion, die auch die Dekorationsfunktion umhüllt.

Das Folgende ist, wie die einfachste Dekorationsfunktion im folgenden Code -Snippet aussieht:

<code class="language-python">def greet():
    print("Hello John")

greet_john = greet
greet_john()
>>>
Hello John</code>

Zeigen Sie den obigen Code an, die externe Funktion increase_number (auch als Dekorateur bezeichnet) den Funktionsparameter func. increase_by_one ist eine Wrapper -Funktion, die die dekorierte get_number -Funktion enthält. Der Dekorateur wird einer anderen Variablen zugeordnet. Dies bedeutet die Dekorateur -Syntax bei der Verwendung von Python -Dekorateur. Es gibt jedoch eine einfachere Möglichkeit, einen Dekorateur darzustellen.

Es ist leicht zu erkennen, dass eine einfache Dekorationsfunktion mit dem @ -Präfix beginnt und die Dekorationsfunktion darunter kombiniert. Das vorherige Beispiel kann wie folgt überarbeitet werden:

<code class="language-python">def greet():
    def greeting_at_dawn():
        print("Good morning")

    return greeting_at_dawn

salute = greet()
salute()
>>>
Good morning</code>

Diese Beispiele zeigen, dass der Dekorateur die Funktionalität seiner Funktionsparameter erweitert.

Dekorateurfunktion mit Parametern

In einigen Fällen müssen Sie möglicherweise Parameter an den Dekorateur übergeben. Die Lösung für dieses Problem besteht darin, das Argument an die Wrapper -Funktion zu übergeben und dann an die dekorierte Funktion zu übergeben. Siehe das folgende Beispiel:

<code class="language-python">def greet_some(func):
    print("Good morning", end=' ')
    func()

def say_name():
    print("John")

greet_some(say_name)
>>>
Good morning John</code>

Die Übergabe von Parametern an interne oder verschachtelte Funktionen macht sie leistungsfähiger und robuster, da sie mehr Flexibilität für die Manipulation dekorierter Funktionen bietet. Eine beliebige Anzahl von Parametern (*args) oder Schlüsselwortparametern (** kwargs) kann an die dekorierte Funktion übergeben werden. *Args ermöglicht die Erfassung aller Positionsparameter, während ** kwargs für alle während eines Funktionsaufrufs erforderlichen Schlüsselwortparameter verwendet wird. Schauen wir uns ein anderes einfaches Beispiel an:

<code class="language-python">def increase_number(func):
    def increase_by_one():
        print("incrementing number by 1 ...")
        number_plus_one = func() + 1
        return number_plus_one
    return increase_by_one

def get_number():
    return 5

get_new_number = increase_number(get_number)
print(get_new_number())
>>>
incrementing number by 1 ...
6</code>

Im obigen Beispiel nimmt *args die Positionsparameter als Tupel ein iterables Objekt, während ** kwargs ein Schlüsselwortparameterwörterbuch bildet.

Mehrere Dekorateure oder Kettenaufrufe in Python

Bei der Verwendung von Funktionsdekorateur in Python -Projekten gibt es mehrere Möglichkeiten zu erkunden. Ein weiterer Anwendungsfall besteht darin, einen Dekorateur (zwei oder mehr) mit einer Funktion zu verbinden. Eine Funktion kann mit mehreren Dekoratoren (mehreren Dekoratoren) dekoriert werden, die durch Stapeln eines Dekors auf einem anderen in der originalen Reihenfolge erreicht werden. Unabhängig von der Reihenfolge, in der mehrere Dekorateure gestapelt sind, erhalten Sie den gleichen Ausgang wie im folgenden Beispiel:

<code class="language-python">def increase_number(func):
    def increase_by_one():
        print("incrementing number by 1 ...")
        number_plus_one = func() + 1
        return number_plus_one
    return increase_by_one

@increase_number
def get_number():
    return 5

print(get_number())
>>>
incrementing number by 1 ...
6</code>

Praktische Anwendungsfälle für Python Decorator

Eine sehr beliebte Möglichkeit, Dekorateure in Python zu verwenden, ist als Zeitlogger. Dies hilft den Programmierern zu verstehen, wie lange es dauert, um eine Funktion zur Messung der Effizienz auszuführen.

Auswendiglernen ist eine weitere coole Möglichkeit, Dekorateure in Python zu verwenden. Wenn die Berechnung später durchgeführt wird, können die Ergebnisse von wiederholten Aufrufen zur Funktion ohne Änderungen leicht in Erinnerung bleiben. Sie können einfach den Dekorateur verwenden, um sich die Funktion zu merken.

eingebaute Python-Dekoratoren wie @ClassMethod, @StaticMethod und @Property sind im OOP-Dekorationsmodus von Python sehr beliebt.

Schlussfolgerung

Python -Dekorateure erzwingen die Trockenprinzipien der Software -Engineering, da sie als wiederverwendbarer Code verwendet werden. Denken Sie darüber nach, wie viele Python -Funktionen Sie in Dekorateure neu gestalten können. In diesem Artikel erkunden wir verschiedene Formen von Dekoratoren. Es gibt auch Klassendekoratoren, obwohl wir sie hier nicht abdecken.

Dekorateure erleichtern es einfacher, einfache Funktionen, Methoden oder Klassen zusätzliche Funktionen hinzuzufügen, ohne ihren Quellcode zu ändern, während der Code trocken bleibt. Versuchen Sie, Funktionen selbst zu dekorieren, um das Dekorationsmuster besser zu verstehen.

FAQs über JavaScript -Dekoratoren

Was ist ein JavaScript -Dekorateur?

JavaScript Decorator ist ein Designmuster und eine in ECMAScript 2016 (ES6) und spätere Versionen von JavaScript eingeführte Funktion. Sie können das Verhalten einer Funktion, Methode oder Klasse ändern oder verbessern, indem Sie Kommentare oder Metadaten anwenden. Dekorateure werden üblicherweise in verschiedenen JavaScript -Bibliotheken und -Rahmenbedingungen wie Angular und MOBX verwendet. Dekorateure werden normalerweise als Funktionen implementiert, die objektive Funktionen oder Klassen einwickeln oder "dekorieren". Sie werden verwendet, um Funktionen hinzuzufügen oder das Verhalten eines Ziels zu ändern, ohne seinen Kerncode zu ändern. Dekorateure können auf Funktionen, Methoden oder Klassen angewendet werden, und sie werden durch das @ -Symbol gefolgt vom Namen des Dekorateurs angezeigt.

Warum brauchen wir einen JavaScript -Dekorator?

Dekorateure in JavaScript sind aus folgenden Gründen eine wertvolle Ergänzung der Sprache: Sie fördern die Modularität und die Wiederverwendbarkeit von Code, indem sie Entwicklern ermöglichen, Cross-Schnitt-Bedenken von der Kernlogik von Funktionen und Methoden zu trennen. Dies fördert eine sauberere Code -Basis, indem die Verwirrung verringert und die Lesbarkeit verbessert wird, wodurch der Code leichter zu warten und zu verstehen ist. Dekorateure spielen eine wichtige Rolle bei der Einhaltung des Prinzips der Bedenken, da Sie Aspekte wie Sicherheit, Protokollierung und Konfiguration von der Kernanwendungslogik trennen. Dekorateure bringen Konsistenz in Ihre Codebasis, indem sie sicherstellen, dass bestimmte Verhaltensweisen oder Richtlinien konsistent auf Funktionen und Methoden angewendet werden. Sie bieten eine flexible Möglichkeit, das Verhalten von Funktionen zu konfigurieren und anzupassen, um einfache Änderungen oder Erweiterungen der Funktionalität zu ermöglichen, ohne den Kerncode zu ändern. Durch die Unterstützung von Aspektprogrammierungen (AOP) helfen Dekoratoren, systematisch übergreifende Bedenken auszusprechen, was zu sauberer und organisierterer Code führt. Dekorateure werden auch zunehmend von Bibliotheken und Frameworks von Drittanbietern übernommen, was sie zu einem Muss für die effiziente Verwendung moderner JavaScript-Tools macht. Insgesamt verbessern Dekoratoren die Codeorganisation, die Lesbarkeit, die Wartbarkeit und die Skalierbarkeit und machen sie zu wertvollen Assets für JavaScript -Entwickler.

Was ist der Unterschied zwischen einem Python -Dekorateur und einem JavaScript -Dekorateur?

Python und JavaScript -Dekoratoren teilen das Konzept der Änderung von Funktionen oder Methodenverhalten, unterscheiden sich jedoch in der Syntax und Verwendung. Python verwendet die Syntax @Decorator_function und kann für verschiedene Zwecke auf Funktionen und Klassen angewendet werden. JavaScript Decorator verwendet die @Decorator -Syntax und wird hauptsächlich für Klassen, Methoden und Eigenschaften verwendet. Python-Dekoratoren sind vielseitiger, während JavaScript-Dekorateure klassenzentriert sind und im Rahmen von ECMAScript 2016 eingeführt wurden.

Die Ausgabe behält die ursprüngliche Bildformatierung bei und verändert nicht die Kernbedeutung des Eingabetxtes.

Das obige ist der detaillierte Inhalt vonPython -Dekoratoren verstehen mit Beispielen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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