Heim  >  Artikel  >  Backend-Entwicklung  >  Wie unterscheiden sich Python-Abschlüsse von verschachtelten Funktionen?

Wie unterscheiden sich Python-Abschlüsse von verschachtelten Funktionen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-24 18:15:13891Durchsuche

How Do Python Closures Differ From Nested Functions?

Verschlüsse in Python: Das Geheimnis enthüllen

Verschachtelte Funktionen kommen häufig in Python vor und werfen Fragen zu ihrer Beziehung zu Verschlüssen auf. Obwohl sie einige Merkmale gemeinsam haben, sind sie nicht austauschbar.

Abschlüsse sind Funktionen, die den Zugriff auf die lokalen Variablen des äußeren Bereichs behalten, selbst nachdem die umschließende Funktion die Ausführung abgeschlossen hat. Dadurch können sie diese Variablen später verwenden.

Verschachtelte Funktionen im Vergleich zu Abschlüssen

Verschachtelte Funktionen hingegen werden innerhalb einer anderen Funktion definiert, erben diese jedoch nicht lokale Variablen standardmäßig. Sie werden nur dann zu Abschlüssen, wenn sie auf lokale Variablen aus dem äußeren Bereich verweisen, die sonst nach Abschluss der umschließenden Funktion außer Reichweite wären.

Beispiel für einen Abschluss in Python:

def make_printer(msg):
    def printer():
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()  # Output: Foo!

In diesem Beispiel bezieht sich die verschachtelte Funktion „printer“ auf die lokale Variable „msg“ aus der umschließenden Funktion „make_printer“. Wenn make_printer zurückkehrt, befindet sich msg normalerweise außerhalb des Gültigkeitsbereichs, aber der Abschluss behält den Zugriff darauf.

Das Fehlen eines Abschlusses in verschachtelten Funktionen, die nicht auf Variablen außerhalb des Gültigkeitsbereichs verweisen:

Wenn eine verschachtelte Funktion keine lokalen Variablen aus dem äußeren Bereich referenziert, gilt sie nicht als Abschluss. Stattdessen verhält sie sich wie eine gewöhnliche Funktion mit ihren eigenen lokalen Variablen.

Beispiel einer nicht abschließenden verschachtelten Funktion:

def make_printer(msg):
    def printer(msg=msg):
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()  # Output: Foo!

Hier der Standardwert von Der msg-Parameter wird im verschachtelten Funktionsdrucker verwendet und stellt sicher, dass er unabhängig vom äußeren Bereich über eine eigene lokale Variable verfügt. Es handelt sich also nicht um eine Schließung.

Das obige ist der detaillierte Inhalt vonWie unterscheiden sich Python-Abschlüsse von verschachtelten Funktionen?. 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