的函數列表我有功能的陣列,例如:lambda函數和在Python
>>> def f():
... print "f"
...
>>> def g():
... print "g"
...
>>> c=[f,g]
然後我嘗試創建兩個lambda函數:
>>> i=0
>>> x=lambda: c[i]()
>>> i+=1
>>> y=lambda: c[i]()
,然後打電話給他們:
>>> x()
g
>>> y()
g
爲什麼lambda中的c [i]是相同的?
解決這個問題的_easy_方法是首先不創建無用的'lambda's。只需用'x = c [i]'和'y = c [i]'替換這兩行,就可以得到您想要的功能。編寫'lambda:f()'而不是'f'的唯一原因是將'f'粘貼到一個閉包名稱空間中以便稍後查看它,而不是僅僅使用它。你不想在這裏這樣做,事實上,這正是導致你的問題。 – abarnert