假设我们有一个功能列表
funcs = [int, float]
我们希望将它们应用于一个参数0
以获取[0, 0.0]
显然我们可以(编辑:应该!)做
[f(0) for f in funcs]
但标准库中是否还有其他任何机制,类似于map
函数?
答案 0 :(得分:2)
这里的列表理解是首选方法。但是,如果您想避免列表理解,可以使用map()
:
map(lambda f: f(0), funcs)
#[0, 0.0]
但是在python3中你需要用map()
来调用list
,因为map()
返回一个迭代器:
list(map(lambda f: f(0), funcs))
但是作为@jonrsharpe mentioned in the comments,不推荐这样做wastefully creates a list。
在运行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
map()
的两种解决方案都是第二快的。答案 1 :(得分:2)
>>> from operator import methodcaller
>>> funcs = [int, float]
>>> map(methodcaller('__call__', 0), funcs)
[0, 0.0]
毫无意义但可能。