3 Stimmen

Verschachtelte Lambdas in Python

Ich bin ein Anfänger Python-Programmierer, und ich würde gerne jemand das folgende Verhalten zu klären.

Ich habe den folgenden Code:

env = lambda id: -1

def add(id, val, myenv):
    return lambda x: val if x == id else myenv(id)

test_env = add("a", 1, env)
test_env_2 = add("b", 2, test_env)

Wenn ich "a" nachschlage in test_env funktioniert er korrekt, aber wenn ich ihn in test_env_2 es scheint von "b" überholt worden zu sein. Zumindest ist "b" alles, was ich aus den folgenden Quellen abrufen kann test_env_2 .

Also, ich habe bereits gelesen Umfang der Python-Lambda-Funktionen und ihrer Parameter et al und verstehen, dass Schließungen auf Referenzen statt Werte arbeiten, aber ich glaube, dies ist nicht genau der gleiche Fall, da ich String-Literale verwenden. Kann mir jemand erklären, was hier unter der Haube vor sich geht?

(Und ja, ich weiß, dass Python nicht als funktionale Sprache gedacht ist. Dies ist nur Forschung.)

5voto

Dario Punkte 47246

Ich glaube, Sie verwechseln gerade myenv(id) avec myenv(x) . Ändern Sie ihn und Sie erhalten die gewünschte Ausgabe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X