Python中的嵌套Lambda

dan*_*ben 3 python lambda closures functional-programming nested

我是一个初学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)
Run Code Online (Sandbox Code Playgroud)

当我查看"a"时test_env,它的功能正常,但是当我查看它时,test_env_2似乎被"b"破坏了.至少,"b"是我可以从中检索的test_env_2.

所以,我已经阅读了python lambda函数的范围及其参数等,并且理解闭包对引用而不是值进行操作,但我相信这不是完全相同的情况,因为我使用的是字符串文字.有人可以向我解释一下这里有什么问题吗?

(是的,我知道Python并不是一种功能语言.这只是研究.)

Dar*_*rio 5

我想,你只是感到困惑myenv(id)与myenv(x).改变它,你会得到所需的输出.