2009-11-23 75 views
3

我是一名開始的Python程序員,我希望有人澄清以下行爲。Python中嵌套的Lambdas

我有以下代碼:

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」是我可以從test_env_2檢索到的。

所以,我已經讀了Scope of python lambda functions and their parameters等人,並且明白閉包在引用而不是值上操作,但我相信這不是完全相同的情況,因爲我使用的是字符串文字。有人能向我解釋這裏引擎蓋下發生了什麼嗎?

(是的,我知道,Python是不打算作爲一個功能性的語言,這只是研究。)

+1

Python是多參數,但功能風格被認爲是pythonically! – Dario 2009-11-23 20:48:14

回答

5

我覺得你只是混淆myenv(id)myenv(x)。改變它,你會得到所需的輸出。

+0

多麼愚蠢的錯誤。謝謝。 – danben 2009-11-23 21:03:13