# What's the function like sum() but for multiplication? product()?

Actually, Guido vetoed the idea: http://bugs.python.org/issue1093

But, as noted in that issue, you can make one pretty easily:

```
from functools import reduce # Valid in Python 2.6+, required in Python 3
import operator
reduce(operator.mul, (3, 4, 5), 1)
```

**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.

There isn't one built in, but it's simple to roll your own, as demonstrated here:

```
import operator
def prod(factors):
return reduce(operator.mul, factors, 1)
```

See answers to this question:

Which Python module is suitable for data manipulation in a list?