import functools
import operator


def product(data, start=1):
    """product(iterable [, start]) -> product of numbers

    Return the product of ``data``, a sequence or iterator of numbers:

    >>> product([2.0, 1.5, 3.0, 0.25])
    2.25

    If optional argument ``start`` is given and is not None, the total is
    multiplied by it. If ``data`` is empty, ``start`` (defaulting to 1) is
    returned.
    """
    return functools.reduce(operator.mul, data, start)
    # Don't be tempted to do anything clever with summation of logarithms,
    # since that ends up *much* less accurate.