Heim >Backend-Entwicklung >Python-Tutorial >Warum geben in Schleifen erstellte Funktionen manchmal falsche Werte zurück?

Warum geben in Schleifen erstellte Funktionen manchmal falsche Werte zurück?

Linda Hamilton
Linda HamiltonOriginal
2024-12-27 18:11:15378Durchsuche

Why Do Functions Created in Loops Sometimes Return the Wrong Values?

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!

Stellungnahme:
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