2012-11-21 35 views
25

這裏的功能是我試圖使用map功能的環路:使用地圖()的關鍵字參數

volume_ids = [1,2,3,4,5] 
ip = '172.12.13.122' 
for volume_id in volume_ids: 
    my_function(volume_id, ip=ip) 

有沒有一種方法,我可以做到這一點?如果它不是ip參數,這將是微不足道的,但我不知道如何處理。

回答

55

使用functools.partial()

from functools import partial 

mapfunc = partial(my_function, ip=ip) 
map(mapfunc, volume_ids) 

partial()創建一個新的調用,那將適用任何參數(包括關鍵字參數)的包裝的函數除了任何被傳遞到新的調用。

+1

非常酷,謝謝! –

9

這裏是一個lambda方法(不是更好,只是不同)

volume_ids = [1,2,3,4,5] 
ip = '172.12.13.122' 
map(lambda ids: my_function(ids, ip), volume_ids); 
+2

泛音更快,lambda表達式支持亂序參數 –

0

這個怎麼樣?

results = [] 
for volume_id in volume_ids: 
    results.append(my_function(volume_id, ip=ip)) 

這是三行代碼,而不是一個---它是不是從模塊等,和進口等一些特殊情況的輔助三行明確而清晰的代碼。這個說法可能是一個口味問題,但是它的重量取決於你與誰交談。

+0

的問題是,我們要避免for循環 – mleger45

+0

爲什麼?因爲它更清晰?或者因爲像「for循環在Python中很慢」的一些誤解? –

+0

是的,我會說的確是更清晰,更Pythonish和地圖功能是爲了執行最懶的迭代更多鈔票。此外,我們需要一個列表回來,所以地圖會比寫多行編碼一個for循環 – mleger45

4

這可以通過列表理解輕鬆完成。

volume_ids = [1,2,3,4,5] 
ip = '172.12.13.122' 
results = [my_function(i,ip=ip) for i in volume_ids] 
+1

在修真創建my_function的參數被向後更好地履行對我們來說。它應該是 my_function(i,ip = ip) –