Python 将函数列表应用于一个参数

Python 将函数列表应用于一个参数,python,Python,假设我们有一个函数列表 funcs = [int, float] 我们想把它们应用到一个参数0,得到[0,0.0] 显然我们可以(编辑:而且应该!)这样做 但是在标准库中是否有其他类似于map函数的机制?这里的列表理解是首选方法。但是,如果要避免列表理解,可以使用map(): 但是在python3中,您需要将对map()的调用包装为list,因为map()返回一个迭代器: list(map(lambda f: f(0), funcs)) 但作为@jornsharpe,不推荐这样做 计时结果

假设我们有一个函数列表

funcs = [int, float]
我们想把它们应用到一个参数
0
,得到
[0,0.0]

显然我们可以(编辑:而且应该!)这样做


但是在标准库中是否有其他类似于
map
函数的机制?

这里的列表理解是首选方法。但是,如果要避免列表理解,可以使用
map()

但是在python3中,您需要将对
map()
的调用包装为
list
,因为
map()
返回一个迭代器:

list(map(lambda f: f(0), funcs))
但作为@jornsharpe,不推荐这样做

计时结果 在我运行python 2.7的计算机上

#List comprehension
%%timeit
[f(0) for f in funcs]
#1000000 loops, best of 3: 352 ns per loop

#map + lambda
%%timeit
map(lambda f: f(0), funcs)
#1000000 loops, best of 3: 687 ns per loop

#generator
list(f(0) for f in funcs)
#1000000 loops, best of 3: 1.1 µs per loop

#map + methodcaller
%%timeit
map(methodcaller('__call__', 0), funcs)
#1000000 loops, best of 3: 687 ns per loop
  • 最慢的解决方案(到目前为止)是中@timgeb建议的生成器方法
  • 列表理解是最快的
  • 使用
    map()
    的两种解决方案都是第二快的

毫无意义但可能。

这只是Python 2.x中的一个列表。
list(map(…)
如果这是Python 3,他已经知道map:>“也许有一些类似于map的库函数?”@Wondercricket特别建议不要这样做,而是使用列表理解。map+lambda:无用。改用listcomp。不清楚您为什么要避免列表理解-您试图解决的问题是什么?为了进一步澄清,使用库来执行列表理解的工作听起来不是一个好主意。
list(f(0)表示函数中的f)
--技术上不是列表理解:)投票重新打开。虽然这个问题可能毫无意义,但这里所问的问题一点也不“不清楚”。
list(map(lambda f: f(0), funcs))
#List comprehension
%%timeit
[f(0) for f in funcs]
#1000000 loops, best of 3: 352 ns per loop

#map + lambda
%%timeit
map(lambda f: f(0), funcs)
#1000000 loops, best of 3: 687 ns per loop

#generator
list(f(0) for f in funcs)
#1000000 loops, best of 3: 1.1 µs per loop

#map + methodcaller
%%timeit
map(methodcaller('__call__', 0), funcs)
#1000000 loops, best of 3: 687 ns per loop
>>> from operator import methodcaller
>>> funcs = [int, float]
>>> map(methodcaller('__call__', 0), funcs)
[0, 0.0]