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

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

Barbara Streisand
Freigeben: 2024-11-24 18:15:13
Original
1037 Leute haben es durchsucht

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!
Nach dem Login kopieren

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!
Nach dem Login kopieren

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!

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