2013-08-01 55 views
2

我有其中有10這樣的除數的列表:我可以獲得在Python中使用過濾器的函數列表嗎?

print filter(lambda x: 10 % x == 0, range(1, 10)) 
>>>[1, 2, 5] 

然後,我需要的功能,像這樣的列表:

F = [lambda x:k+x for k in filter(lambda x: 10 % x == 0, range(1, 10))] 

當我調用列表中的每個功能,它變成出錯:

for f in F: 
    print(f(0)) 
>>> 5 
>>> 5 
>>> 5 

所以我怎樣才能得到正確的功能列表?

回答

1

lambda函數捕獲變量k。要解決它,你可以把它複製到一個局部變量的函數蘭巴:

F = [lambda x, k=k:k+x for k in filter(lambda x: 10 % x == 0, range(1, 10))] 
+0

延伸閱讀:[?在Python做什麼(lambda)函數閉包捕獲(http://stackoverflow.com/questions/2295290 /什麼-DO-λ-功能性關閉捕捉功能於蟒蛇) – sloth

相關問題