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
Freigeben: 2024-11-08 16:22:01
Original
1052 Leute haben es durchsucht

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)
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

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