Python中的嵌套Lambda

3 投票
1 回答
2076 浏览
提问于 2025-04-15 16:18

我是一名初学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) 搞混了。把它改过来,你就能得到想要的结果了。

撰写回答