Heim  >  Artikel  >  Backend-Entwicklung  >  Warum drucken alle Schaltflächen den gleichen Index, wenn Lambda-Funktionen in einer Schleife verwendet werden?

Warum drucken alle Schaltflächen den gleichen Index, wenn Lambda-Funktionen in einer Schleife verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-26 18:26:29898Durchsuche

Why Do All Buttons Print the Same Index When Using Lambda Functions in a Loop?

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!

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