Warum teilen sich Lambdas innerhalb von Schleifen in Python den Status?

Patricia Arquette
Freigeben: 2024-11-18 05:53:02
Original
207 Leute haben es durchsucht

Why Do Lambdas Within Loops in Python Share State?

Lambdas innerhalb von Schleifen: Gemeinsamen Zustand ansprechen

In Python können innerhalb einer Schleife erstellte Lambdas aufgrund des gemeinsamen Zustands unerwartetes Verhalten zeigen. Betrachten Sie als Beispiel den folgenden Code, der darauf abzielt, Lambdas zu erstellen, die auf die Eigenschaft eines Objekts zugreifen:

lambdas_list = []
for obj in obj_list:
   lambdas_list.append(lambda : obj.some_var)
Nach dem Login kopieren

Beim Durchlaufen und Aufrufen dieser Lambdas wird jedoch immer der Eigenschaftswert des letzten Objekts erhalten:

for f in lambdas_list:
    print(f())
Nach dem Login kopieren
Nach dem Login kopieren

Um diese Einschränkung zu beheben, kann eine einfache Änderung vorgenommen werden:

lambdas_list.append(lambda obj=obj: obj.some_var)
Nach dem Login kopieren

Durch die Bereitstellung eines Standardarguments für das Lambda wird der aktuelle Wert des Objekts zum Zeitpunkt der Erstellung erfasst. Dadurch wird sichergestellt, dass jedes Lambda seinen eigenen Zustand beibehält und die gewünschten Ergebnisse erzielt werden:

for f in lambdas_list:
    print(f())
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum teilen sich Lambdas innerhalb von Schleifen in Python den Status?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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