Erfassen von Variablen in Lambda-Funktionen: Abschluss
In Lambda-Funktionen ist das Erfassen von Variablen aus dem umschließenden Bereich ein häufiges Problem. Eine Lambda-Funktion verweist standardmäßig auf Variablen in ihrem umschließenden Bereich. Die Auflösung dieser Referenzen erfolgt jedoch zum Zeitpunkt der Ausführung und nicht während der Definition.
Betrachten Sie diesen Codeausschnitt, in dem wir mithilfe einer Schleife fünf Schaltflächen erstellen und an jede Schaltfläche einen Befehl binden, um ihren Index mithilfe von a zu drucken Lambda-Funktion:
<code class="python">for i in range(5): make_button = Tkinter.Button(frame, text ="make!", command= lambda: makeId(i))</code>
Man könnte erwarten, dass dieser Code den Index der Schaltfläche ausgibt, auf die geklickt wurde. Es wird jedoch immer „5“ ausgegeben, da der Wert von i zum Zeitpunkt des Endes der Schleife erfasst wird, also nachdem i auf 5 erhöht wurde.
Lösung: Verwenden eines Abschlusses
Um dieses Problem zu lösen, können wir einen Abschluss verwenden. Ein Abschluss ist eine Funktion, die Variablen aus ihrem umschließenden Bereich erfasst und sie bei der Definition initialisiert. Dadurch können wir den korrekten Wert von i für jede Schaltfläche erfassen.
<code class="python">make_button = Tkinter.Button(frame, text ="make!", command= lambda i=i: makeId(i))</code>
Durch die Zuweisung von i=i innerhalb der Lambda-Funktion erstellen wir eine lokale Variable, die mit dem aktuellen Wert von i aus der Schleife initialisiert wird . Dadurch wird sichergestellt, dass jede Schaltfläche einen eigenen Verweis auf den vorgesehenen Index hat.
Das obige ist der detaillierte Inhalt vonWarum gibt meine Lambda-Funktion immer „5' aus? Eine Anleitung zum Erfassen von Variablen in Python.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!