首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数列表映射到Python中的变量的优雅方法

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

Stack Overflow用户
提问于 2022-09-19 21:47:41
回答 2查看 83关注 0票数 0

假设我有一个输入变量:

代码语言:javascript
复制
var = 10

我有一个功能清单:

代码语言:javascript
复制
functions = [
  lambda x: x + 1,
  lambda x: x + 10,
  lambda x: x + 42
]

是否有一种优雅的方法来映射变量上的函数以获得列表输出?

代码语言:javascript
复制
# elegant one-liner here
11
20
52

请不要用[f(var) for f in functions],请给我map的东西。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-19 21:56:24

如问题所示,您可以使用map进行此操作:

代码语言:javascript
复制
map(lambda f: f(var), functions)

作为将来的参考,lambda f:f(var)接受一个函数,并将该函数应用于一个值--这就是我们希望对列表中的每个元素执行的操作,所以我们将它应用到list中,将这个lambda函数应用到列表的每个元素,并以变量var作为参数调用该元素。

然而,正如jonrsharpe提到的在评论中,如果您不仅仅是在遍历映射,那么列表理解就更符合标准的Python样式指南。

作为将来参考的最后一个部分,即使您只是在迭代它,您也可以考虑使用生成器表达式,它具有map的许多优点。

票数 4
EN

Stack Overflow用户

发布于 2022-09-19 22:09:27

使用apply

代码语言:javascript
复制
var = 10

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

result = map(apply, functions, [[var]] * len(functions))

print(result)

输出(在网上试试!):

代码语言:javascript
复制
[11, 20, 52]

啊,美好的过去。

Python 3:

代码语言:javascript
复制
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)

输出(在网上试试!):

代码语言:javascript
复制
[11, 20, 52]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73779630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档