Python中的嵌套Lambda
我是一名初学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"。
我已经阅读了关于 Python lambda 函数及其参数的作用域 等内容,明白闭包是基于引用而不是值来工作的,但我觉得这并不是完全相同的情况,因为我使用的是字符串字面量。有人能给我解释一下这里到底发生了什么吗?
(是的,我知道Python并不是为了作为一种函数式语言。这只是我在研究。)
1 个回答
5
我觉得你可能把 myenv(id)
和 myenv(x)
搞混了。把它改过来,你就能得到想要的结果了。