Abschlüsse sind in Python ein wichtiges Konzept, das es einer Funktion ermöglicht, sich an die Umgebung zu „erinnern“, in der sie erstellt wurde, auch nachdem die Ausführung der Funktion abgeschlossen ist. Mit Abschlüssen können wir zustandsbehaftete Funktionen implementieren, ohne globale Variablen oder Klasseninstanzen zu verwenden.
In diesem Beitrag untersuchen wir Schließungen, indem wir einen einfachen Zähler mit dem Schlüsselwort nonlocal implementieren. Lasst uns eintauchen!
Ein Abschluss erfolgt, wenn eine verschachtelte Funktion auf eine Variable aus ihrem umschließenden Bereich verweist, wodurch der Zugriff auf diese Variablen auch dann erhalten bleibt, wenn die Ausführung der umschließenden Funktion abgeschlossen ist. Abschlüsse sind besonders nützlich, wenn Sie einen Zustand oder ein Verhalten innerhalb einer Funktion kapseln möchten.
In Python verwenden wir das Schlüsselwort nonlocal, um eine Variable im nächstgelegenen umschließenden Bereich zu ändern, der nicht global ist. Ohne das Schlüsselwort nonlocal kann eine innere Funktion Variablen in ihrem umschließenden Bereich nicht ändern; es würde stattdessen eine neue lokale Variable erstellen. Das Schlüsselwort nonlocal löst dieses Problem, indem es Python mitteilt, dass wir mit einer Variablen aus dem umschließenden Bereich arbeiten möchten.
Lassen Sie uns eine einfache Zählerfunktion erstellen, die Abschlüsse verwendet, um die Zählung zu verfolgen, ohne auf globale Variablen oder eine Klasse angewiesen zu sein.
Wir erstellen eine Funktion namens make_counter, die ein inneres Funktionsinkrement zurückgibt. Die innere Funktion erhöht bei jedem Aufruf eine Zählvariable.
Um sicherzustellen, dass die Inkrementierungsfunktion die im Gültigkeitsbereich der make_counter-Funktion definierte Zählvariable ändert, verwenden wir das Schlüsselwort nonlocal.
Hier ist die Implementierung:
def make_counter(): count = 0 # Variable in the enclosing scope def increment(): nonlocal count # Tell Python to modify the `count` from the enclosing scope count += 1 # Increment the counter return count # Return the current count return increment # Return the inner function, which forms the closure
Da wir nun die Funktion make_counter haben, können wir eine Instanz des Zählers erstellen und diese mehrmals aufrufen, um zu sehen, wie sich der Zähler erhöht.
counter = make_counter() print(counter()) # Output: 1 print(counter()) # Output: 2 print(counter()) # Output: 3 print(counter()) # Output: 4 print(counter()) # Output: 5
Abschlüsse bieten eine leistungsstarke und elegante Möglichkeit, den Zustand innerhalb von Funktionen zu kapseln. Sie sind besonders nützlich in Szenarien, in denen:
Abschlüsse können für fortgeschrittenere Anwendungsfälle wie Dekoratoren, Memoisierung und Rückrufe verwendet werden.
Das obige ist der detaillierte Inhalt vonAbschlüsse in Python verstehen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!