Heim > Backend-Entwicklung > Python-Tutorial > Welche Variablen erfassen Python-Lambda-Funktionsabschlüsse tatsächlich?

Welche Variablen erfassen Python-Lambda-Funktionsabschlüsse tatsächlich?

DDD
Freigeben: 2024-12-29 06:55:14
Original
368 Leute haben es durchsucht

What Variables Do Python Lambda Function Closures Actually Capture?

Was erfassen Python-Lambda-Funktionsabschlüsse?

Bei der Arbeit mit Python-Lambda-Funktionsabschlüssen ist es wichtig, deren Erfassungsverhalten zu verstehen. Ein Abschluss erfasst die Werte von Variablen aus seinem umschließenden Bereich, die innerhalb des Abschlusses verwendet werden. Die Art und Weise, wie diese Erfassung erfolgt, kann jedoch überraschend sein.

Um dies zu veranschaulichen, betrachten Sie den folgenden Code:

adders = [None, None, None, None]

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

print(adders[1](3))
Nach dem Login kopieren

In diesem Code erstellen wir eine Liste von Lambda-Funktionen, die ausgeführt werden einen einzelnen Eingang und fügen Sie ihm einen konstanten Wert hinzu. Der konstante Wert wird bei der Funktionserstellung zunächst auf den Wert von i gesetzt. Wenn wir jedoch die Liste der Abschlüsse untersuchen, stellen wir überraschenderweise fest, dass sie alle auf den Endwert von i verweisen, was zu einer unerwarteten Ausgabe von 6 führt.

Dieses Verhalten resultiert aus der Tatsache, dass Abschlüsse den Wert von erfassen Variable und nicht ihre Referenz. Wenn sich der Wert von i nach der Abschlusserstellung ändert, bezieht sich der Abschluss daher weiterhin auf den zuletzt erfassten Wert.

Erfassen des aktuellen Werts

Um den zu erfassen Um den aktuellen Wert von i zu ermitteln, können wir einen Trick anwenden, der als „Dummy-Parameter“-Technik bekannt ist. Indem wir einen Parameter mit demselben Namen wie die Variable, die wir erfassen möchten, deklarieren und ihn mit einem Standardwert dieser Variablen versehen, erzwingen wir, dass der Abschluss den aktuellen Wert erfasst.

for i in [0, 1, 2, 3]:
    adders[i] = lambda a, i=i: i + a  # <-- Note the dummy parameter with a default value

print(adders[1](3))  # Output: 4
Nach dem Login kopieren

Mit dieser Technik wird die Der Abschluss erfasst den Wert von i zum Zeitpunkt seiner Erstellung und stellt sicher, dass spätere Änderungen an i keinen Einfluss auf das Verhalten des Abschlusses haben.

Das obige ist der detaillierte Inhalt vonWelche Variablen erfassen Python-Lambda-Funktionsabschlüsse tatsächlich?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage