2015-07-28 22 views
2

我有以下代碼:地圖功能的應用程序,而不拉姆達在python

def f1(): 
    print("f1") 

def f2(): 
    print("f2") 

flist = [f1,f2] 

list(map(lambda x: x(), flist)) 

我需要擺脫拉姆達的,因爲它不能用泡菜傾倒。

是否有任何函數或構造運行收到的函數作爲參數?

下面是實際的代碼,我需要修改和刪除的輔助函數 「調用」:

from multiprocessing import Pool 
def call(x): 
    x() 
p = Pool() 
p.map(call, func_list) 

回答

1

你可以嘗試

[f() for f in flist] 

希望這有助於:)

+0

我需要使用「地圖」功能。這只是一個大框架代碼,我必須使用它的「地圖」 –

+0

@GabrielCiubotaru:*** Lamda函數*是「匿名函數」**。你可以創建一個新的函數,例如'callFunc(func)',並傳遞一個函數對象給'callFunc'調用:'callFunc(func):func()'。現在的地圖是:'list(map(callFunc,flist))' – elegent

+0

我知道,但我想知道python是否已經實現了。既然它也有「功能編程」的範例,我認爲「功能應用」是必須的 –

2

map函數不是基於python文檔的此任務的願望方法:

map返回一個將函數應用於每個可迭代項的迭代器,以產生結果。

在這裏,你只是處理函數,你想打電話給他們,所以你可以使用列表理解或循環遍歷你的函數列表,並以你喜歡的方式調用它們。

但是如果你的函數返回值,我建議使用列表理解,因爲在這裏,因爲你只是打印一些文字你的函數返回None,你會創建一個額外的列表:

>>> [func() for func in flist] 
f1 
f2 
[None, None] 

在這種情況下,一個簡單的循環會高效:

>>> for func in flist: 
... func() 
... 
f1 
f2 

如果你的函數返回值,你可以使用列表理解:

>>> def f1(): 
...  return "f1" 
... 
>>> def f2(): 
...  return "f2" 
... 

>>> flist = [f1,f2] 
>>> [func() for func in flist] 
['f1', 'f2']