Heim >Backend-Entwicklung >Python-Tutorial >Warum geben in Schleifen erstellte Funktionen manchmal falsche Werte zurück?
Umgang mit der Funktionserstellung in Schleifen: Fehlerbehebung bei später Bindung
Beim Versuch, Funktionen innerhalb einer Schleife zu erstellen, tritt ein häufiges Problem auf. Im bereitgestellten Beispiel besteht das Ziel darin, drei Funktionen zu generieren, die jeweils 0, 1 und 2 zurückgeben. Am Ende geben jedoch alle drei Funktionen denselben Wert zurück (2). Dies geschieht aufgrund der späten Bindung, bei der die Funktionen ihre Auswertung der Variablen „i“ bis zum letztmöglichen Moment verschieben.
Grundlegendes zur späten Bindung
Im Code ohne den Fix:
for i in range(3): def f(): return i
Jedes „f“ sucht spät in der Ausführung der Schleife nach „i“, Zu diesem Zeitpunkt hat „i“ seinen endgültigen Wert von 2 erreicht. Folglich geben alle drei Funktionen 2 zurück, obwohl die Schleife beabsichtigt, Funktionen zu erstellen, die 0, 1 und 2 zurückgeben.
Behebung des Problems
Die Lösung für dieses Problem besteht darin, eine frühzeitige Bindung durchzusetzen. Dies kann erreicht werden, indem „i“ wie folgt als Argument an die Funktion „f“ übergeben wird:
for i in range(3): def f(i=i): return i
In diesem aktualisierten Code wird „i“ zum Zeitpunkt der Definition nachgeschlagen, wenn die Schleife ausgeführt wird und nicht zum Zeitpunkt des Aufrufs, wenn 'f' ausgeführt wird.
Alternative Lösung mit Abschlüssen
Ein anderer Ansatz besteht darin, einen Abschluss zu verwenden Erstellen Sie eine „Funktionsfabrik“:
def make_f(i): def f(): return i return f
Innerhalb der Schleife kann dann „f“ mit „f = make_f(i)“ erstellt werden. Dieser Ansatz gewährleistet auch eine frühe Bindung, da die Funktion „make_f“ den Wert von „i“ zum Definitionszeitpunkt an „f“ übergibt.
Das obige ist der detaillierte Inhalt vonWarum geben in Schleifen erstellte Funktionen manchmal falsche Werte zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!