


So vermeiden Sie unerwartete Ergebnisse durch Parameteränderungen in Lambda-Funktionen
Oct 19, 2024 pm 05:28 PMUmfang von Lambda-Funktionen und ihre Parameter
Lambda-Funktionen sind anonyme Funktionen, die den Umfang ihrer umschließenden Funktion erfassen können. Dadurch können sie auf Variablen und Parameter aus dem übergeordneten Bereich zugreifen. Dieses Verhalten kann jedoch manchmal zu unerwarteten Ergebnissen führen, wenn Lambda-Funktionen Parameter verwenden, die innerhalb der einschließenden Funktion geändert wurden.
Um das Problem zu veranschaulichen, betrachten Sie den folgenden Code:
<code class="python">def callback(msg): print(msg) # Creating a list of function handles with an iterator funcList = [] for m in ('do', 're', 'mi'): funcList.append(lambda: callback(m)) # Calling the lambda functions for f in funcList: f()</code>
Der erwartete Die Ausgabe dieses Codes lautet:
do re mi
Die tatsächliche Ausgabe lautet jedoch:
mi mi mi
Dies liegt daran, dass die Lambda-Funktionen einen Verweis auf die Variable m aus dem umschließenden Bereich erfassen. Wenn der Iterator die Schleife ausführt, weist er m in der letzten Iteration den Wert „mi“ zu. Daher haben alle Lambda-Funktionen bei ihrer Ausführung einen Verweis auf „mi“, auch wenn ihnen bei der Erstellung unterschiedliche Werte übergeben wurden.
Um dieses Problem zu beheben, können Sie den Wert von m at erfassen den Zeitpunkt der Erstellung der Lambda-Funktion, indem er als Standardwert eines optionalen Parameters verwendet wird:
<code class="python">for m in ('do', 're', 'mi'): funcList.append(lambda m=m: callback(m))</code>
Dadurch wird sichergestellt, dass jede Lambda-Funktion Zugriff auf ihre eigene Kopie von m hat und den Wert erfasst, der während der Erstellung zugewiesen wurde Schleifeniteration. Die Ausgabe dieses Codes lautet:
do re mi
Das obige ist der detaillierte Inhalt vonSo vermeiden Sie unerwartete Ergebnisse durch Parameteränderungen in Lambda-Funktionen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Wie benutze ich eine schöne Suppe, um HTML zu analysieren?

So herunterladen Sie Dateien in Python

So verwenden Sie Python, um die ZiPF -Verteilung einer Textdatei zu finden

Wie man mit PDF -Dokumenten mit Python arbeitet

Wie kann man mit Redis in Django -Anwendungen zwischenstrichen

Wie führe ich ein tiefes Lernen mit Tensorflow oder Pytorch durch?

So implementieren Sie Ihre eigene Datenstruktur in Python
