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.)