Heim >Backend-Entwicklung >Python-Tutorial >Wie verhindern Sie Verwirrung beim Lambda-Schließen beim Erstellen von Lambdas in Schleifen?

Wie verhindern Sie Verwirrung beim Lambda-Schließen beim Erstellen von Lambdas in Schleifen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-08 16:22:011053Durchsuche

How Do You Prevent Lambda Closure Confusion When Creating Lambdas in Loops?

Verhindern von Lambda-Schließungsverwechslungen in Schleifen

Beim Erstellen von Lambdas innerhalb einer Schleife, die eine Liste von Objekten durchläuft, ist es wichtig, sich dessen bewusst zu sein Lambda-Schließverhalten. Standardmäßig erfassen Lambdas die Variablen im umschließenden Bereich, wenn sie definiert werden. Wenn sich jedoch Variablen innerhalb der Schleife ändern, verweisen später in der Schleife erstellte Lambdas auf die aktualisierten Werte.

Betrachten Sie das folgende Beispiel, in dem wir Lambdas erstellen, um auf das some_var-Attribut eines Objekts zuzugreifen:

lambdas_list = []
for obj in obj_list:
    lambdas_list.append(lambda: obj.some_var)

Wenn wir dann die Lambda-Liste durchlaufen und jedes Lambda aufrufen, erhalten wir möglicherweise für alle Lambdas den gleichen Wert. Dies liegt daran, dass das letzte in der Schleife erstellte Lambda den Endzustand von obj erfasst und dieser Wert von allen Lambdas zurückgegeben wird.

Um dieses Problem zu lösen, können wir das Objekt angeben, das vom Lambda erfasst werden soll ein Standardargument. Dadurch wird sichergestellt, dass jedes Lambda die richtige Objektreferenz erfasst:

lambdas_list.append(lambda obj=obj: obj.some_var)

Mit diesem Ansatz erfasst jedes Lambda das Objekt, auf das es bei seiner Erstellung verweisen sollte. Dies verhindert Verwirrung und stellt sicher, dass sich die Lambdas wie erwartet verhalten, wenn sie später in der Schleife aufgerufen werden.

Das obige ist der detaillierte Inhalt vonWie verhindern Sie Verwirrung beim Lambda-Schließen beim Erstellen von Lambdas 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