Heim >Backend-Entwicklung >Python-Tutorial >Warum verweisen in Schleifen erstellte Lambdas auf das letzte Objekt?

Warum verweisen in Schleifen erstellte Lambdas auf das letzte Objekt?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-08 17:38:02510Durchsuche

Why Do Lambdas Created in Loops Reference the Last Object?

Anpassen der Lambda-Erstellung innerhalb von Schleifen

Wenn Sie mit Listen von Objekten arbeiten und versuchen, Lambdas innerhalb einer Schleife zu erstellen, die auf Objektattribute zugreifen, können Sie dies tun Es tritt ein Problem auf, bei dem alle Lambdas auf das letzte Objekt in der Liste verweisen.

Um dieses Problem zu beheben, besteht der Schlüssel darin, für jedes die richtige Objektreferenz zu erfassen Lambda. Der folgende Codeausschnitt bietet eine verbesserte Lösung:

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

Indem Sie obj=obj als Schlüsselwortargument in der Lambda-Funktion festlegen, erstellen Sie innerhalb jeder Iteration einen neuen Bereich für obj. Dadurch wird sichergestellt, dass jedes Lambda die richtige Objektreferenz erfasst und diese von Änderungen in nachfolgenden Schleifeniterationen isoliert.

Wenn Sie also über die lambdas_list iterieren und jede Funktion aufrufen, erhalten Sie die erwarteten Ergebnisse für jedes Objekt in der obj_list. Diese Methode behebt effektiv das Problem, dass alle Lambdas auf das letzte Objekt in der Liste verweisen, und bietet eine robustere und pythonischere Lösung.

Das obige ist der detaillierte Inhalt vonWarum verweisen in Schleifen erstellte Lambdas auf das letzte Objekt?. 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