Цель этого ответа - предоставить расчет, который будет полезен в определенных обстоятельствах, а именно, когда: а) умножается большое количество значений, так что конечный продукт может быть очень большим или очень маленьким, и вы на самом деле не заботитесь о точном ответе, но вместо этого имеете ряд последовательностей и хотите иметь возможность упорядочить их по каждому продукту.
Если вы хотите умножить элементы списка, где l - список, вы можете сделать:
import math
math.exp(sum(map(math.log, l)))
Теперь этот подход не так удобен для чтения, как
from operator import mul
reduce(mul, list)
Если вы математик, не знакомый с методом Reduce (), обратное может быть правдой, но я бы не советовал использовать его в обычных условиях. Это также менее читабельно, чем функция product (), упомянутая в вопросе (по крайней мере, для нематематиков).
Однако, если вы когда-нибудь окажетесь в ситуации, когда вы рискуете переполниться или переполниться, например, в
>>> reduce(mul, [10.]*309)
inf
и ваша цель - сравнить продукты разных последовательностей, а не узнать, что это за продукты, тогда
>>> sum(map(math.log, [10.]*309))
711.49879373515785
- это путь, потому что практически невозможно иметь реальную проблему, в которой вы будете переполнены или переполнены этим подходом. (Чем больше результат этого расчета, тем больше будет произведение, если вы сможете рассчитать его.)