## Question

Asked By – Patrick McElhaney

Python’s `sum()`

function returns the sum of numbers in an iterable.

```
sum([3,4,5]) == 3 + 4 + 5 == 12
```

I’m looking for the function that returns the product instead.

```
somelib.somefunc([3,4,5]) == 3 * 4 * 5 == 60
```

I’m pretty sure such a function exists, but I can’t find it.

**Now we will see solution for issue: What’s the function like sum() but for multiplication? product()? **

## Answer

**Update:**

In Python 3.8, the *prod* function was added to the *math* module. See: math.prod().

## Older info: Python 3.7 and prior

The function you’re looking for would be called *prod()* or *product()* but Python doesn’t have that function. So, you need to write your own (which is easy).

## Pronouncement on prod()

Yes, that’s right. Guido rejected the idea for a built-in prod() function because he thought it was rarely needed.

## Alternative with reduce()

As you suggested, it is not hard to make your own using *reduce()* and *operator.mul()*:

```
from functools import reduce # Required in Python 3
import operator
def prod(iterable):
return reduce(operator.mul, iterable, 1)
>>> prod(range(1, 5))
24
```

Note, in Python 3, the *reduce()* function was moved to the functools module.

## Specific case: Factorials

As a side note, the primary motivating use case for *prod()* is to compute factorials. We already have support for that in the math module:

```
>>> import math
>>> math.factorial(10)
3628800
```

## Alternative with logarithms

If your data consists of floats, you can compute a product using *sum()* with exponents and logarithms:

```
>>> 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
```

Note, the use of *log()* requires that all the inputs are positive.

This question is answered By – Raymond Hettinger