Heim >Backend-Entwicklung >Python-Tutorial >Warum erfassen Python-Lambda-Funktionen Werte, keine Referenzen, und wie kann dieses Problem gelöst werden?

Warum erfassen Python-Lambda-Funktionen Werte, keine Referenzen, und wie kann dieses Problem gelöst werden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-27 10:18:10528Durchsuche

Why Do Python Lambda Functions Capture Values, Not References, and How Can This Be Resolved?

Abschlusserfassungen in Lambda-Funktionen verstehen

Python-Abschlüsse erfassen den Zustand des umschließenden Bereichs, in dem sie definiert sind. Insbesondere erfassen sie die Werte von Variablen, auf die in der Lambda-Funktion verwiesen wird und die nicht in ihrem Gültigkeitsbereich vorhanden sind.

Im bereitgestellten Beispiel erfassen die Lambda-Funktionen die Variable i, der bei der Ausführung der Schleife unterschiedliche Werte zugewiesen werden. Allerdings erfassen die Lambda-Funktionen keinen Verweis auf das Objekt, auf das i zeigt. Stattdessen erfassen sie den Wert von i zum Zeitpunkt ihrer Erstellung.

Dieses Verhalten erklärt das unerwartete Ergebnis von 6 beim Aufruf von adders[1](3). Trotz der Erwartung eines Verweises auf das ganzzahlige Objekt erfasst die Lambda-Funktion den Wert 3, der der endgültige Wert ist, der i zugewiesen wird.

Um das gewünschte Verhalten der Beibehaltung des aktuellen Werts von i in jeder Lambda-Funktion zu erreichen , kann eine Technik namens Argumentstandards verwendet werden. Durch die Bereitstellung eines Standardarguments für die Lambda-Funktion wird der Wert von i zum Zeitpunkt der Erstellung festgelegt. Beispiel:

for i in [0, 1, 2, 3]:
   adders[i] = lambda a, i=i: i+a

In diesem Fall ist für den Parameter i ein Standardwert auf den aktuellen Wert festgelegt Wert von i. Wenn die Lambda-Funktion aufgerufen wird, verwendet sie den Wert von i, der während ihrer Erstellung erfasst wurde.

Diese Methode stellt sicher, dass jede Lambda-Funktion im Adders-Array den beabsichtigten Wert von i erfasst, sodass sie den erwarteten Wert erzeugen kann Ausgabe bei Aufruf.

Das obige ist der detaillierte Inhalt vonWarum erfassen Python-Lambda-Funktionen Werte, keine Referenzen, und wie kann dieses Problem gelöst werden?. 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