我是一个刚开始的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
,功能正常,但当我在
test_env_2
它似乎被“B”击倒了。至少,“B”是我能得到的
测试环境2
.
所以,我已经读过了
Scope of python lambda functions and their parameters
et al和理解闭包是在引用而不是值上操作的,但是我相信这不是完全相同的情况,因为我使用的是字符串文本。有人能告诉我引擎盖下面发生了什么吗?
(是的,我知道python并不是一种功能性语言。这只是研究。)