Heim > Backend-Entwicklung > Python-Tutorial > Wie erfasst man Variablen in Lambda-Funktionen ordnungsgemäß in Schleifen?

Wie erfasst man Variablen in Lambda-Funktionen ordnungsgemäß in Schleifen?

Susan Sarandon
Freigeben: 2024-10-19 17:26:02
Original
676 Leute haben es durchsucht

How to Properly Capture Variables in Lambda Functions in Loops?

Variablen in Lambda-Funktionen erfassen

Bei der Verwendung von Lambda-Funktionen innerhalb einer Schleife ist es wichtig, ihren Variablenbereich zu verstehen. Im Gegensatz zu regulären Funktionen, die lokale Variablen kopieren, verweisen Lambda-Funktionen auf diese.

Bedenken Sie den angegebenen Code:

<code class="python">for m in ('do', 're', 'mi'):
    funcList.append(lambda: callback(m))</code>
Nach dem Login kopieren

Hier erfasst die Lambda-Funktion den Wert von m aus dem umschließenden Bereich. Nach Abschluss der Schleife behält m jedoch den letzten Wert („mi“) bei. Wenn jede Lambda-Funktion aufgerufen wird, verweist sie auf diese gemeinsam genutzte m-Variable, was zur Ausgabe „mi“ mehrmals führt.

Um dieses Problem zu lösen und sicherzustellen, dass jedes Lambda einen eindeutigen Wert von m erfasst, verwenden Sie eine Technik namens „ Standardargumente":

<code class="python">for m in ('do', 're', 'mi'):
    funcList.append(lambda m=m: callback(m))</code>
Nach dem Login kopieren

Indem m zu einem Standardparameter mit demselben Namen gemacht wird, erfasst jedes Lambda seine eigene Instanz der Variablen und stellt so die erwartete Ausgabe sicher:

"do"
„re“
„mi“

Das obige ist der detaillierte Inhalt vonWie erfasst man Variablen in Lambda-Funktionen ordnungsgemäß in Schleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage