Lambda-Abschlüsse in Python
In Python erstellen Lambda-Funktionen Abschlüsse und ermöglichen den Zugriff auf Variablen außerhalb ihres Gültigkeitsbereichs. Bei Verwendung innerhalb einer Schleife kann dieses Verhalten jedoch zu unerwarteten Ergebnissen führen.
Problemstellung
Betrachten Sie den folgenden Code, in dem fünf Schaltflächen mithilfe einer Schleife erstellt werden. Jede Schaltfläche bindet einen Befehl zum Drucken ihres Index:
<code class="python">for i in range(5): make_button = Tkinter.Button(frame, text ="make!", command= lambda: makeId(i))</code>
Verhalten
Beim Klicken drucken alle Schaltflächen denselben Index, der immer 5 ist. Dies geschieht, weil Die Variablenauflösung in Lambdas erfolgt zur Ausführungszeit. Wenn auf eine Schaltfläche geklickt wird, ist die Schleife abgeschlossen und i ist für alle Schaltflächen gleich 5.
Lösung
Um dieses Problem zu beheben, müssen wir Folgendes tun Erstellen Sie in jedem Lambda lokale Variablen, die den korrekten Wert von i erfassen. Dies kann erreicht werden, indem i als Argument an Lambda übergeben wird, etwa so:
<code class="python">make_button = Tkinter.Button(frame, text ="make!", command= lambda i=i: makeId(i))</code>
Dadurch wird für jedes Lambda eine lokale i-Variable erstellt, die den Wert von i aus der Schleifeniteration behält. Dadurch stellen wir sicher, dass jede Schaltfläche den erwarteten Index druckt.
Das obige ist der detaillierte Inhalt vonWarum drucken alle Schaltflächen den gleichen Index, wenn Lambda-Funktionen in einer Schleife verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!