Heim > Backend-Entwicklung > Python-Tutorial > Warum können Lambda-Funktionen in Python-Schleifen manchmal nicht richtig gebunden werden?

Warum können Lambda-Funktionen in Python-Schleifen manchmal nicht richtig gebunden werden?

Barbara Streisand
Freigeben: 2024-12-26 19:43:22
Original
467 Leute haben es durchsucht

Why Do Lambda Functions in Python Loops Sometimes Fail to Bind Properly?

Lambda-Funktionen in Schleifen

In Python bieten Lambda-Funktionen eine übersichtliche Möglichkeit, anonyme Funktionen zu definieren. Wenn sie jedoch innerhalb von Schleifen verwendet werden, können sie zu unerwartetem Verhalten führen, wenn keine ordnungsgemäße Bindung gewährleistet ist.

Beachten Sie den folgenden Codeausschnitt:

directorys = {'login': <object>, 'home': <object>}
for d in directorys:
    self.command["cd " + d] = (lambda : self.root.change_directory(d))
Nach dem Login kopieren

Die Absicht besteht darin, einen Wörterbuchzuordnungsbefehl zu erstellen Zeichenfolgen an Funktionen, die das Verzeichnis ändern. Das Ergebnis ist jedoch unerwartet: Die beiden erstellten Lambda-Funktionen sind identisch und führen denselben Befehl aus, wodurch das Verzeichnis in „login“ geändert wird.

Warum passiert das?

Lambda-Funktionen innerhalb einer Schleife haben denselben Funktionsumfang. Dies bedeutet, dass die von der Lambda-Funktion erfasste Variable für alle Iterationen der Schleife dieselbe ist. In diesem Fall stellt „d“ den Wert des letzten Elements im „Verzeichnisse“-Wörterbuch dar, nämlich „login“.

Lösung des Problems

Um sicherzustellen Für eine ordnungsgemäße Bindung müssen wir sicherstellen, dass jede Lambda-Funktion Zugriff auf ihren eigenen eindeutigen Wert „d“ hat. Ein Ansatz besteht darin, „d“ als Parameter mit einem Standardwert zu übergeben:

lambda d=d: self.root.change_directory(d)
Nach dem Login kopieren

Indem wir den Standardwert von „d“ in jeder Iteration der Schleife auf den aktuellen Wert von „d“ setzen, können wir Erstellen Sie für jede Lambda-Funktion einen eindeutigen Abschluss. Alternativ können wir zusätzliche Abschlusstechniken verwenden, um das gleiche Ergebnis zu erzielen:

(lambda d=d: lambda: self.root.change_directory(d))()
Nach dem Login kopieren

Diese äußere Lambda-Funktion erstellt einen Abschluss für „d“ und die innere Lambda-Funktion verwendet „d“ aus dem Abschluss.

Das obige ist der detaillierte Inhalt vonWarum können Lambda-Funktionen in Python-Schleifen manchmal nicht richtig gebunden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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