Heim >Backend-Entwicklung >Python-Tutorial >Warum beziehen sich meine Lambda-Funktionen in einer Schleife alle auf dieselbe Variable?
Lambda in einer Schleife
Im bereitgestellten Code soll ein Wörterbuch mit Befehlsfunktionen erstellt werden, in dem jeder Wert ein Lambda-Ausdruck ist das self.root.change_directory mit einem bestimmten Verzeichnisnamen aufruft. Der Code führt jedoch fälschlicherweise dazu, dass alle Befehlsfunktionen denselben Verzeichniswechsel durchführen.
Das Problem entsteht, weil die Lambda-Ausdrücke auf eine einzelne Variable, d, verweisen, die für jede Iteration der Schleife dieselbe ist. Folglich verweisen alle Lambda-Ausdrücke letztendlich auf den letzten Wert von d.
Um dies zu korrigieren, ist es notwendig, an jeden Lambda-Ausdruck einen eindeutigen Wert von d zu binden. Dies kann erreicht werden, indem ein Standardwert für den Lambda-Parameter verwendet wird, wie unten gezeigt:
self.command["cd " + d] = lambda d=d: self.root.change_directory(d)
In diesem Fall erstellt d=d für jede Iteration von eine neue Bindung von d an den aktuellen Wert von d die Schleife. Dadurch hat jeder Lambda-Ausdruck seinen eigenen eindeutigen Verweis auf den d-Wert.
Alternativ kann ein Abschluss verwendet werden, um den gleichen Effekt zu erzielen:
self.command["cd " + d] = (lambda d: lambda: self.root.change_directory(d))(d)
Dieser Abschluss erstellt einen neuen Umgebung für jeden Lambda-Ausdruck, wobei d an den aktuellen Wert von d gebunden ist. Daher hat jeder Lambda-Ausdruck Zugriff auf seinen eigenen eindeutigen Wert von d.
Das obige ist der detaillierte Inhalt vonWarum beziehen sich meine Lambda-Funktionen in einer Schleife alle auf dieselbe Variable?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!