我是一名初学python程序员,我希望有人澄清以下行为。
我有以下代码:
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)
当我在test_env
中查找“a”时,它正常运行,但是当我在test_env_2
中查找时,它似乎被“b”破坏了。至少,我可以从test_env_2
检索“b”。
所以,我已经读过Scope of python lambda functions and their parameters等并且理解闭包对引用而不是值进行操作,但是我认为这不是完全相同的情况,因为我使用的是字符串文字。有人可以向我解释一下这里发生了什么事吗?
(是的,我知道Python并不是一种功能语言。这只是研究。)
答案 0 :(得分:5)
我认为您只是将myenv(id)
与myenv(x)
混为一谈。改变它,你就会获得所需的输出。