好日子,lambda表達式和詞典
我很困惑與以下:
v = {}
v[-1] = lambda x: 1
v[0] = lambda x: x
for k in range(1, n): # k = 1...n-1
v[k] = lambda x: 2*x*v[k-1](x) - v[k-2](x)
當我打電話,說,v[3](1)
產生一個錯誤maximum recursion depth exceeded
,而這一點:
v = {}
v[-1] = lambda x: 1
v[0] = lambda x: x
v[1] = lambda x: 2*x*v[1-1](x) - v[1-2](x)
v[2] = lambda x: 2*x*v[2-1](x) - v[2-2](x)
v[3] = lambda x: 2*x*v[3-1](x) - v[3-2](x)
工作得很好。我無法弄清楚在第一種情況下Python的投訴是什麼。建議會有幫助。
另外,使用'dis'模塊,'dis.dis(v [1])給出了這條有趣的一行:'10 LOAD_GLOBAL 1(k)',它表明k的值在循環期間不被評估。 – njzk2
這就是問題所在,但您還沒有提出解決方案。 – martineau
問題是「什麼導致了這種行爲」而這回答了這個問題。我不能完全提供解決方案,因爲現在OP知道他的計劃不奏效,他應該提出一個新想法,如果他有問題,他可以問另一個問題,另外,@ njzk2提供了一個解決方案,可以爲OP工作(儘管它可能不是OP想要的) –