代码之家  ›  专栏  ›  技术社区  ›  danben

python中嵌套的lambda

  •  3
  • danben  · 技术社区  · 16 年前

    我是一个刚开始的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并不是一种功能性语言。这只是研究。)

    1 回复  |  直到 16 年前
        1
  •  5
  •   Dario    16 年前

    我想你只是困惑了 myenv(id) 具有 myenv(x) . 改变它,你就会得到想要的输出。