Verschachtelte Funktionen in Python: Warum nicht Abschlüsse?
Verschachtelte Funktionen in Python sind eine Funktion, die es ermöglicht, Funktionen innerhalb anderer Funktionen zu definieren. Diese Funktionen erben die Variablen von ihrem umschließenden Bereich und ermöglichen so den Zugriff auf Variablen, die sonst unerreichbar wären.
Obwohl sie Ähnlichkeiten mit Abschlüssen aufweisen, werden verschachtelte Funktionen in Python nicht als Abschlüsse bezeichnet. Diese Unterscheidung ergibt sich aus ihrem Verhalten. Ein Abschluss ist eine Funktion, die Zugriff auf Variablen aus einem umschließenden Bereich hat, auch nachdem dieser Bereich verlassen wurde.
Wenn eine verschachtelte Funktion in Python definiert wird, behält sie nicht von Natur aus den Zugriff auf die Variablen ihres umschließenden Bereichs . Stattdessen erstellt die verschachtelte Funktion einen neuen Bereich und hat nur Zugriff auf Variablen in diesem Bereich.
Damit sich eine verschachtelte Funktion wie ein Abschluss verhält, muss sie zwei Schlüsselkriterien erfüllen:
Wenn eine verschachtelte Funktion diese beiden Bedingungen erfüllt, verhält sie sich wie ein Abschluss. Ansonsten handelt es sich einfach um eine verschachtelte Funktion.
Betrachten Sie das folgende Beispiel:
def make_printer(msg): def printer(): print(msg) return printer printer = make_printer('Foo!') printer() # Output: Foo!
In diesem Beispiel greift die Druckerfunktion aus ihrem umschließenden Bereich (make_printer) auf die Variable msg zu. Da sie außerhalb ihres umschließenden Bereichs ausgeführt wird (wenn sie einem Drucker zugewiesen und dann aufgerufen wird), verhält sie sich wie ein Abschluss.
Im Gegensatz dazu ist dies bei einer verschachtelten Funktion, die keine Variablen aus ihrem umschließenden Bereich referenziert, nicht der Fall eine Schließung. Zum Beispiel:
def make_printer(msg): def printer(msg=msg): print(msg) return printer printer = make_printer('Foo!') printer() # Output: Foo!
Hier ist die msg-Variable an den Standardwert des Parameters gebunden und nicht an die Variable im umschließenden Bereich. Daher ist diese verschachtelte Funktion kein Abschluss.
Zusammenfassend werden verschachtelte Funktionen in Python nicht als Abschlüsse bezeichnet, da sie nicht von Natur aus das Verhalten von Abschlüssen aufweisen, bei denen auf Variablen aus einem umschließenden Bereich zugegriffen wird, nachdem dieser beendet wurde . Um als Abschluss zu gelten, muss eine verschachtelte Funktion sowohl auf Variablen aus ihrem umschließenden Bereich verweisen als auch außerhalb davon ausgeführt werden.
Das obige ist der detaillierte Inhalt vonWann sind verschachtelte Python-Funktionen tatsächlich Abschlüsse?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!