map 不会将可迭代对象解包为函数参数,而是作为处理此类问题的更通用方法,您可以使用 itertools 模块中的 starmap() 函数,而不是 map()当参数参数已经从单个可迭代的元组中分组时:
from itertools import starmap
starmap(f, zip(a,b))
这是一个例子:
In [2]: a = range(5)
In [3]: b = range(5, 10)
In [7]: from itertools import starmap
In [8]: list(starmap(f, zip(a,b)))
Out[8]: [0, 6, 14, 24, 36]
作为另一种选择,您可以将可迭代对象单独传递给映射,而无需压缩它们。
In [13]: list(map(mul, a, b))
Out[13]: [0, 6, 14, 24, 36]
另外,作为一种更 Pythonic 的方式来将两个变量相乘,您可以使用 operator.mul() 而不是创建自定义函数:
In [9]: from operator import mul
In [10]: list(starmap(mul, zip(a,b)))
Out[10]: [0, 6, 14, 24, 36]
这是基准:
In [11]: %timeit list(starmap(mul, zip(a,b)))
1000000 loops, best of 3: 838 ns per loop
In [12]: %timeit list(starmap(f, zip(a,b)))
1000000 loops, best of 3: 1.05 µs per loop