2010-07-01 55 views
3

您是否認爲將map應用於參數列表並忽略結果是可以的?使用map將函數應用於參數列表並忽略結果可以嗎?

map(foo, bar) 

對閱讀代碼的人可能會出現bug。

+1

這不是地圖的全部要點嗎?從文檔:「將函數應用於每個可迭代項並返回結果列表。」 – Mark 2010-07-01 15:15:52

+3

也許吧,但是我打電話給地圖並且扔掉結果時,我在這個力量中充斥着干擾。 – 2010-07-01 15:29:36

+2

地圖的全部用途是用於功能性編程。故意使用功能性編程構造來產生副作用應該擾亂這種力量。 – Wilduck 2010-07-01 15:36:24

回答

8

當你想要的結果使用地圖應用到列表中的每一項功能完全正常的方式,但許多人發現它更清晰的把它寫成一個列表理解或發電機:

result = [foo(x) for x in bar] 

然而如果你不打算使用函數調用的結果,只關心副作用,那麼你應該寫使用過程風格來代替:

for x in bar: 
    foo(x) 
+0

此外,python是高度優化的這種用法。列表理解是你的朋友。 – Wilduck 2010-07-01 15:18:05

6

此行爲是令人難以接受的。除非你打算使用返回的列表,否則使用for循環。

0

這裏是我如何破解它在一起:

from itertools import imap, ifilterfalse 

tuple(ifilterfalse(None, imap(lambda x: x+1, range(10)))) 

tuple將永遠是空的(考慮到本輸入)。

相關問題