Zum Beispiel, warum funktioniert das?
%Vor% Wenn innerfunc
in func2
aufgerufen wird, woher kennt es die Werte von func1var
?
Python geht tatsächlich etwas dafür ein, dies für Sie zu tun. Wenn Sie eine Funktion in einer Funktion definieren, können Sie Variablen aus der äußeren Funktion in der inneren Funktion verwenden. Dies gilt für jede Verschachtelungstiefe (das heißt, Sie können eine Funktion innerhalb einer Funktion innerhalb einer Funktion haben ... bis zu einer beliebigen Tiefe ... und die innerste Funktion kann Variablen aus einer der umschließenden Funktionen verwenden). Wenn widersprüchliche Namen vorhanden sind, wird die innerste Variable mit dem angeforderten Namen verwendet.
Außerdem erfasst Python alle von Ihnen verwendeten Variablen aus der äußeren Funktion und speichert sie in der inneren Funktion, die als Closure bezeichnet wird. Sie können also nicht nur eine Funktion an eine andere Funktion übergeben, Wie Sie es tun, aber Sie können eine Funktion aus einer Funktion zurückgeben, und Variablen, die Sie aus der äußeren Funktion verwenden, die beim Definieren der Funktion in Kraft waren, sind dennoch von der zurückgegebenen Funktion aus zugänglich Die äußere Funktion läuft nicht mehr. Dies ist eine ziemlich fortgeschrittene Funktion, aber Sie können so etwas tun:
%Vor%Diese Funktion ist eine Funktion, die eine Funktion erstellt , die den angegebenen Wert hinzufügt. Zum Beispiel:
%Vor% In diesem Fall wird der Wert, den Sie an make_adder
übergeben, erfasst und in der Funktion gespeichert, die zurückgegeben wird. Auf diese Weise können Sie eine Reihe von Funktionen erstellen, die ihren Argumenten eine beliebige Zahl hinzufügen. Das ist ein triviales Beispiel, das im wirklichen Leben eigentlich nicht sehr nützlich ist, aber dazu dient, das Feature zu veranschaulichen.
Sie haben eine Sperrung erstellt. Betrachten wir es im Grunde so, aus der Sicht der inneren Funktion:
%Vor% Es ist nicht wichtig, ob func1var
in einem äußeren oder globalen Bereich ist - es sucht nur in jedem Bereich nach außen, beginnend mit seinem eigenen lokalen Bereich. Es ist genau so, als wenn Sie eine globale Modulvariable innerhalb einer Klasse oder Funktion in diesem Modul referenzieren.
Tags und Links python function function-pointers