将多个函数应用于函数Python中的相同参数

时间:2015-11-11 20:22:37

标签: python dictionary functional-programming

我正在尝试"反转" {I}有多个函数我想要应用于同一个参数的情况下map(相同的函数,多个参数)。我试图找到一种更多功能的方法来取代传统的

arg = "My fixed argument"
list_of_functions = [f, g, h] #note that they all have the same signature
[fun(arg) for fun in list_of_functions]

我唯一能想到的是

map(lambda x: x(arg), list_of_functions)

这不是很好。

2 个答案:

答案 0 :(得分:3)

您可以尝试:

from operator import methodcaller

map(methodcaller('__call__', arg), list_of_functions)

operator模块也具有类似的功能,用于从对象中获取固定属性或项目,通常在函数式编程风格中很有用。没有什么可以直接调用可调用的,但是methodcaller足够接近。

虽然,在这种情况下,我个人更喜欢列表理解。也许如果operator模块中存在直接等价物,例如:

def functioncaller(*args, **kwargs):
    return lambda fun:fun(*args, **kwargs)

...将其用作:

map(functioncaller(arg), list_of_functions)

...那么也许它会方便吗?

答案 1 :(得分:0)

在Python 3中,你的map()示例返回一个map对象,所以这些函数只有在迭代时才会被调用,这至少是懒惰的。