Heim > Artikel > Backend-Entwicklung > Wie erfassen Sie lokale Variablen in Lambda-Abschlüssen innerhalb von Schleifen?
Lambda-Abschlüsse und Variablenbereiche in Schleifen
Beim Definieren von Lambdas innerhalb von Schleifen ist es wichtig zu verstehen, wie Variablenbereiche funktionieren. Im bereitgestellten Codeausschnitt verweist jedes innerhalb der Schleife erstellte Lambda auf dieselbe Variable obj, die bei jeder Iteration geändert wird.
Standardbereichsauflösung
Standardmäßig a Lambda erfasst die Variablen aus dem umschließenden Bereich. Im angegebenen Code ist der umschließende Bereich der Schleifenblock. Somit erfasst jedes Lambda effektiv den letzten Wert von obj. Dieses Verhalten kann zu falschen Ergebnissen führen, wenn die Lambdas aus einem anderen Bereich aufgerufen werden, da sie möglicherweise nicht den erwarteten Wert haben.
Lokale Variablen erfassen
Um dieses Problem zu beheben , müssen Sie das Lambda zwingen, den aktuellen Wert von obj zu erfassen. Dies kann durch die Einführung einer neuen lokalen Variablen im Lambda erreicht werden, die zum Zeitpunkt der Erstellung an obj gebunden ist. Der folgende Codeausschnitt demonstriert diesen Ansatz:
lambdas_list = [] for obj in obj_list: lambdas_list.append(lambda obj=obj: obj.some_var)
Indem wir obj explizit als Argument an das Lambda übergeben, erstellen wir für jedes Lambda eine neue lokale Variable. Dadurch wird sichergestellt, dass jedes Lambda den lokalen Wert von obj aus der Schleifeniteration erfasst. Wenn Sie die Lambdas aus einem anderen Bereich aufrufen, greifen sie daher auf den richtigen Wert zu.
Das obige ist der detaillierte Inhalt vonWie erfassen Sie lokale Variablen in Lambda-Abschlüssen innerhalb von Schleifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!