假设我有一个输入变量:
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]