Heim > Backend-Entwicklung > Python-Tutorial > Warum geben in einer Schleife erstellte Funktionen denselben Wert zurück und wie kann ich das beheben?

Warum geben in einer Schleife erstellte Funktionen denselben Wert zurück und wie kann ich das beheben?

Linda Hamilton
Freigeben: 2025-01-04 13:05:47
Original
580 Leute haben es durchsucht

Why Do Functions Created in a Loop Return the Same Value, and How Can I Fix It?

Funktionen (oder Lambdas) in einer Schleife (oder Verständnis) erstellen: Late Binding verstehen

Beim Erstellen von Funktionen oder Lambdas innerhalb einer Schleife ist es wichtig, das Konzept zu berücksichtigen der späten Bindung. Im gegebenen Beispiel:

functions = []

for i in range(3):
    def f():
        return i
    functions.append(f)
Nach dem Login kopieren

jede Funktion sucht den Wert von i so spät wie möglich, also nach Abschluss der Schleife. Infolgedessen geben alle Funktionen den Endwert von i zurück, der 2 ist.

Um dieses Problem zu beheben und drei verschiedene Funktionen zu erhalten, die 0, 1 und 2 ausgeben, müssen wir eine frühe Bindung erzwingen. Dies kann durch die Verwendung von Standardparametern erreicht werden:

functions = []

for i in range(3):
    def f(i=i):  # Default parameter for i
        return i
    functions.append(f)
Nach dem Login kopieren

In diesem Fall wird der Standardparameter i zum Zeitpunkt der Definition und nicht zum Zeitpunkt des Aufrufs ausgewertet, um sicherzustellen, dass jede Funktion den korrekten Wert von i verwendet.

Alternativ können wir eine Funktionsfabrik verwenden, um Funktionen mit früher Bindung zu erstellen:

def make_f(i):
    def f():
        return i
    return f

functions = []

for i in range(3):
    functions.append(make_f(i))
Nach dem Login kopieren

Die Funktion make_f erstellt eine neue Funktion mit dem korrekten Wert von i gebunden früh.

Das obige ist der detaillierte Inhalt vonWarum geben in einer Schleife erstellte Funktionen denselben Wert zurück und wie kann ich das beheben?. 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