Heim > Backend-Entwicklung > Python-Tutorial > Wie gehen verschachtelte Funktionen mit lokalen Variablen und Abschlüssen in Python um?

Wie gehen verschachtelte Funktionen mit lokalen Variablen und Abschlüssen in Python um?

Linda Hamilton
Freigeben: 2024-12-20 18:04:10
Original
775 Leute haben es durchsucht

How Do Nested Functions Handle Local Variables and Closures in Python?

Lokale Variablen in verschachtelten Funktionen

Dieses komplizierte Beispiel betrifft verschachtelte Funktionen und Abschlüsse, die zu verwirrendem Verhalten führen können. Lassen Sie uns das Rätsel lösen.

Ausführung verschachtelter Funktionen

Verschachtelte Funktionen greifen bei ihrer Ausführung auf Variablen aus dem übergeordneten Bereich zu. In diesem Fall ist die pet_function eine verschachtelte Funktion innerhalb des get_petters-Generators. Bei der Ausführung wird nach Variablen im Bereich von get_petters gesucht.

Abschlusszellen und lokale Variablen

Die pet_function verfügt über eine freie Variable (Käfig). Bei der Kompilierung wird diese freie Variable durch eine Abschlusszelle dargestellt. Wenn pet_function ausgeführt wird, überprüft diese Abschlusszelle den Wert von Cage im umgebenden Bereich von get_petters.

Dynamische Suchvorgänge und Abschlüsse

Das problematische Verhalten tritt auf, wenn die Funs-Liste angezeigt wird entsteht. Zu diesem Zeitpunkt hat der Käfig in get_petters den Wert „cat“. Wenn jede Funktion in funs aufgerufen wird, sucht die Abschlusszelle in pet_function nach dem Wert von Cage zum Zeitpunkt dieses Funktionsaufrufs, nicht zum Zeitpunkt seiner Definition.

Zugriff auf verschiedene Tiere

Um dieses Problem zu beheben, muss pet_function für jedes Tier auf eine bestimmte Instanz des Käfigobjekts zugreifen. Dies kann durch Teilfunktionen, neue Funktionsumfänge oder Schlüsselwortparameter erreicht werden.

Teilfunktion

Eine Teilfunktion erstellt eine neue Funktion mit festen Parametern. Hier ist ein Beispiel mit functools.partial():

def pet_function(cage=None):
    print("Mary pets the " + cage.animal + ".")

yield (animal, partial(gotimes, partial(pet_function, cage=cage)))
Nach dem Login kopieren

Neuer Funktionsumfang

Das Erstellen eines neuen Funktionsumfangs stellt sicher, dass die Käfigvariable innerhalb des neu definierten gebunden ist Funktion.

def scoped_cage(cage=None):
    def pet_function():
        print("Mary pets the " + cage.animal + ".")
    return pet_function

yield (animal, partial(gotimes, scoped_cage(cage)))
Nach dem Login kopieren

Schlüsselwortparameter

Bindung die Käfigvariable als Standardwert für einen Schlüsselwortparameter:

def pet_function(cage=cage):
    print("Mary pets the " + cage.animal + ".")

yield (animal, partial(gotimes, pet_function))
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie gehen verschachtelte Funktionen mit lokalen Variablen und Abschlüssen in Python um?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage