Heim  >  Artikel  >  Backend-Entwicklung  >  Warum gibt meine Lambda-Funktion immer „5“ aus? Eine Anleitung zum Erfassen von Variablen in Python.

Warum gibt meine Lambda-Funktion immer „5“ aus? Eine Anleitung zum Erfassen von Variablen in Python.

Susan Sarandon
Susan SarandonOriginal
2024-10-26 17:26:03369Durchsuche

Why Does My Lambda Function Always Print

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!

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