是的,这是对的。Guido拒绝了内置prod()函数的想法,因为他认为很少需要它。
在Python 3.8中, prod() 已添加到math模块:
>>> from math import prod
>>> prod(range(1, 11))
3628800
正如您建议的那样,使用reduce() 和operator.mul() 制作自己的东西并不难:
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
在Python 3中,reduce() 函数已移至functools模块,因此您需要添加:
from functools import reduce
附带说明一下, prod() 的主要动机用例是计算阶乘。我们已经在@L_419_6@对此提供了支持:
>>> import math
>>> math.factorial(10)
3628800
如果您的数据由浮点数组成,则可以使用带有指数和对数的 sum() 来计算乘积:
>>> from math import log, exp
>>> data = [1.2, 1.5, 2.5, 0.9, 14.2, 3.8]
>>> exp(sum(map(log, data)))
218.53799999999993
>>> 1.2 * 1.5 * 2.5 * 0.9 * 14.2 * 3.8
218.53799999999998