假设我有一个输入变量:
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的东西。
发布于 2022-09-19 21:56:24
如问题所示,您可以使用map进行此操作:
map(lambda f: f(var), functions)作为将来的参考,lambda f:f(var)接受一个函数,并将该函数应用于一个值--这就是我们希望对列表中的每个元素执行的操作,所以我们将它应用到list中,将这个lambda函数应用到列表的每个元素,并以变量var作为参数调用该元素。
然而,正如jonrsharpe提到的在评论中,如果您不仅仅是在遍历映射,那么列表理解就更符合标准的Python样式指南。
作为将来参考的最后一个部分,即使您只是在迭代它,您也可以考虑使用生成器表达式,它具有map的许多优点。
发布于 2022-09-19 22:09:27
使用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]https://stackoverflow.com/questions/73779630
复制相似问题