Heim >Backend-Entwicklung >Python-Tutorial >Warum beziehen sich Lambda-Funktionen in einer Schleife alle auf dieselbe Variable?

Warum beziehen sich Lambda-Funktionen in einer Schleife alle auf dieselbe Variable?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-15 10:21:09398Durchsuche

Why Do Lambda Functions in a Loop All Refer to the Same Variable?

Lambda-Funktionsverhalten in der Schleife

Im angegebenen Codeausschnitt wird ein Wörterbuch mit Lambda-Funktionen gefüllt. Jede Funktion ist dafür verantwortlich, das aktuelle Verzeichnis in ein Verzeichnis zu ändern. Wenn die Schleife jedoch abgeschlossen ist, verweisen alle Lambda-Funktionen auf denselben Verzeichnisnamen.

Um zu verstehen, warum dies geschieht, ist es wichtig, die Natur von Lambda-Funktionen in Schleifen zu erkennen. Lambda-Funktionen sind Abschlüsse, das heißt, sie erfassen die Werte ihres umschließenden Bereichs. In diesem Fall wird die Lambda-Funktion innerhalb der Schleife definiert und erfasst den Wert der d-Variablen.

Die d-Variable wird jedoch in der gesamten Schleife wiederverwendet und überschreibt kontinuierlich ihren Wert. Infolgedessen erfassen alle Lambda-Funktionen am Ende den gleichen Endwert von d.

Lösung

Um dieses Problem zu beheben, ist es notwendig, jede Lambda-Funktion an zu binden ein spezifischer Wert von d. Dies kann durch die Verwendung eines Standardparameterwerts erreicht werden:

lambda d=d: self.root.change_directory(d)

In diesem Code akzeptiert die Lambda-Funktion einen optionalen Parameter d mit einem Standardwert des aktuellen Werts von d in der Schleife. Da Standardparameterwerte beim Erstellen der Funktion ausgewertet werden, erfasst jede Lambda-Funktion ihren eigenen eindeutigen Wert von d.

Alternativ kann ein zusätzlicher Abschluss verwendet werden, um das gleiche Ergebnis zu erzielen:

(lambda d: lambda: self.root.change_directory(d))(d)

In diesem Fall wird eine äußere Lambda-Funktion verwendet, um einen Abschluss um die d-Variable zu erstellen. Anschließend wird die innere Lambda-Funktion verwendet, um den Verzeichniswechsel durchzuführen.

Durch die Verwendung dieser Techniken kann sichergestellt werden, dass jede Lambda-Funktion in der Schleife ihre eigene eindeutige Bindung an die d-Variable hat, was zum gewünschten Ergebnis führt Verhalten.

Das obige ist der detaillierte Inhalt vonWarum beziehen sich Lambda-Funktionen in einer Schleife alle auf dieselbe Variable?. 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