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

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

Susan Sarandon
Susan SarandonOriginal
2024-10-19 17:26:02560Durchsuche

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>

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>

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!

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