Heim >Backend-Entwicklung >Python-Tutorial >Warum erfassen Python-Lambda-Funktionen Werte, keine Referenzen, und wie kann dieses Problem gelöst werden?
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!