2015-07-28 20 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']