在Python中将函数列表映射到变量的优雅方式



假设我有一个输入变量:

var = 10

我有一个功能列表:

functions = [
lambda x: x + 1,
lambda x: x + 10,
lambda x: x + 42
]

有没有一种优雅的方法可以将函数映射到变量上以获得列表输出?

# elegant one-liner here
11
20
52

第页。请不要[f(var) for f in functions],用map

您可以使用map,正如问题所示:

map(lambda f: f(var), functions)

为了将来的参考,lambda f:f(var)获取一个函数,并将该函数应用于一个值-这是我们想要对列表中的每个元素执行的操作,因此我们将其map应用于列表中,将这个lambda函数应用于列表的每个元素,并以变量var作为参数调用该元素。

然而,正如jonrsharpe在评论中提到的那样,如果你不只是在地图上迭代,那么列表理解就更符合标准的Python风格指南。

作为将来参考的最后一句话,即使您只是对其进行迭代,也可以考虑使用生成器表达式,它具有map的许多优点。

使用apply:

var = 10
functions = [
lambda x: x + 1,
lambda x: x + 10,
lambda x: x + 42
]
result = map(apply, functions, [[var]] * len(functions))
print(result)

输出(在线试用!(:

[11, 20, 52]

啊,过去的美好时光。。。

Python 3:

from operator import methodcaller
from functools import partial
var = 10
functions = [
lambda x: x + 1,
lambda x: x + 10,
lambda x: x + 42
]
result = list(map(methodcaller('__call__', var), functions))
print(result)

输出(在线试用!(:

[11, 20, 52]

最新更新