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
Freigeben: 2024-12-27 18:11:15
Original
441 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

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