Was ist der Unterschied zwischen verschachtelten Funktionen und Abschlüssen in Python?

DDD
Freigeben: 2024-11-23 02:32:10
Original
964 Leute haben es durchsucht

What's the Difference Between Nested Functions and Closures in Python?

Verschachtelte Funktionen vs. Abschlüsse in Python

Während verschachtelte Funktionen in Python oberflächlich Abschlüssen ähneln, unterscheiden sie sich grundsätzlich aufgrund eines wesentlichen Unterschieds:

Verschachtelte Funktionen als Nicht-Abschlüsse

Verschachtelte Funktionen in Python gelten nicht als Abschlüsse, da sie die folgende Anforderung nicht erfüllen:

  • Sie greifen nicht auf Variablen zu, die lokal für umschließende Bereiche sind, wenn außerhalb des umschließenden Geltungsbereichs ausgeführt werden.

Bedenken Sie Folgendes Beispiel:

def make_printer(msg):
    def printer():
        print(msg)
    return printer
Nach dem Login kopieren

Hier ist die Druckerfunktion eine verschachtelte Funktion innerhalb von make_printer. Es handelt sich um einen Abschluss, da er auf die lokale Variable msg verweist, nachdem make_printer zurückgegeben wurde.

Abschlussdefinition

Ein Abschluss ist eine Funktion, die einen Verweis auf einen umschließenden Bereich aufrechterhält. Ermöglicht den Zugriff auf Variablen, die nicht in seinem eigenen Bereich definiert sind. Dieser Verweis bleibt auch dann erhalten, wenn der umschließende Bereich verlassen wurde.

Nicht schließende verschachtelte Funktion

Andererseits die folgende verschachtelte Funktion, die einen Standard verwendet Parameterwert, ist kein Abschluss:

def make_printer(msg):
    def printer(msg=msg):
        print(msg)
    return printer
Nach dem Login kopieren

In diesem Fall ist die Variable msg an den Standardwert gebunden, wenn der Drucker aktiviert ist erstellt und referenziert keine Variablen außerhalb seines eigenen Bereichs. Daher handelt es sich nicht um einen Abschluss.

Fazit

Verschachtelte Funktionen in Python, die die Abschlussdefinition nicht erfüllen, werden zur Unterscheidung üblicherweise als „verschachtelte Funktionen“ bezeichnet von echten Verschlüssen. Abschlüsse können nützlich sein, um den Zustand umschließender Bereiche beizubehalten, während nicht-abschließende verschachtelte Funktionen lediglich die Funktionalität innerhalb eines lexikalischen Bereichs kapseln.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen verschachtelten Funktionen und Abschlüssen in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage