.. versionadded:: 3.4
-.. function:: reduce(function, iterable[, initializer])
+.. function:: reduce(function, iterable[, initial], /)
Apply *function* of two arguments cumulatively to the items of *iterable*, from
left to right, so as to reduce the iterable to a single value. For example,
``reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])`` calculates ``((((1+2)+3)+4)+5)``.
The left argument, *x*, is the accumulated value and the right argument, *y*, is
- the update value from the *iterable*. If the optional *initializer* is present,
+ the update value from the *iterable*. If the optional *initial* is present,
it is placed before the items of the iterable in the calculation, and serves as
- a default when the iterable is empty. If *initializer* is not given and
+ a default when the iterable is empty. If *initial* is not given and
*iterable* contains only one item, the first item is returned.
Roughly equivalent to::
- def reduce(function, iterable, initializer=None):
+ initial_missing = object()
+
+ def reduce(function, iterable, initial=initial_missing, /):
it = iter(iterable)
- if initializer is None:
+ if initial is initial_missing:
value = next(it)
else:
- value = initializer
+ value = initial
for element in it:
value = function(value, element)
return value
def reduce(function, sequence, initial=_initial_missing):
"""
- reduce(function, iterable[, initial]) -> value
+ reduce(function, iterable[, initial], /) -> value
Apply a function of two arguments cumulatively to the items of a sequence
or iterable, from left to right, so as to reduce the iterable to a single
}
PyDoc_STRVAR(functools_reduce_doc,
-"reduce(function, iterable[, initial]) -> value\n\
+"reduce(function, iterable[, initial], /) -> value\n\
\n\
Apply a function of two arguments cumulatively to the items of a sequence\n\
or iterable, from left to right, so as to reduce the iterable to a single\n\