我正在尝试"反转" {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)
这不是很好。
答案 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对象,所以这些函数只有在迭代时才会被调用,这至少是懒惰的。