Python中的嵌套Lambda

时间:2009-11-23 20:46:30

标签: python functional-programming lambda nested closures

我是一名初学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并不是一种功能语言。这只是研究。)

1 个答案:

答案 0 :(得分:5)

我认为您只是将myenv(id)myenv(x)混为一谈。改变它,你就会获得所需的输出。

相关问题