Heim >Backend-Entwicklung >Python-Tutorial >Abschlüsse in Python verstehen

Abschlüsse in Python verstehen

Barbara Streisand
Barbara StreisandOriginal
2024-12-23 14:26:09159Durchsuche

Understanding Closures in Python

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!

Was ist eine Schließung?

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.

Das nichtlokale Schlüsselwort

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.

Implementierung eines Zählers mit Schließungen

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.

Schritt 1: Definieren Sie die Funktion make_counter

Wir erstellen eine Funktion namens make_counter, die ein inneres Funktionsinkrement zurückgibt. Die innere Funktion erhöht bei jedem Aufruf eine Zählvariable.

Schritt 2: Verwenden Sie nonlocal, um die Zählvariable zu ändern

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

Schritt 3: Verwendung des Zählers

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

Erläuterung

  • Die Zählvariable wird innerhalb der Funktion make_counter auf 0 initialisiert.
  • Jedes Mal, wenn wir die Inkrementierungsfunktion aufrufen (die von make_counter zurückgegeben wird), ändert sie die Zählvariable im umschließenden Bereich mithilfe des nichtlokalen Schlüsselworts. Dank der Eigenschaft „Closure“ behält die Inkrementierungsfunktion auch nach Abschluss der Ausführung der Funktion „make_counter“ Zugriff auf count.

Warum Verschlüsse verwenden?

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:

  • Sie möchten einen Wert im Auge behalten, ohne ihn dem globalen Geltungsbereich auszusetzen.
  • Sie benötigen eine Funktion, die sich über mehrere Aufrufe hinweg an ihren vorherigen Zustand erinnert (wie unser Gegenbeispiel).
  • Sie möchten keine globalen Variablen verwenden oder Klassen für die einfache Statusverwaltung erstellen.

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!

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