Введение
Примеры
Обзор
# No import needed
# No import required...
from functools import reduce # ... but it can be loaded from the functools module
from functools import reduce # mandatory
reduce
уменьшает Iterable путем применения функции повторно на следующем элементе iterable
и совокупный результате до сих пор.
def add(s1, s2):
return s1 + s2
asequence = [1, 2, 3]
reduce(add, asequence) # equivalent to: add(add(1,2),3)
# Out: 6
В этом примере мы определили собственную add
функции. Однако, Python поставляется со стандартной эквивалентной функцией в operator
модуле:
import operator
reduce(operator.add, asequence)
# Out: 6
reduce
также могут быть переданы начальное значение:
reduce(add, asequence, 10)
# Out: 16
Используя уменьшить
def multiply(s1, s2):
print('{arg1} * {arg2} = {res}'.format(arg1=s1,
arg2=s2,
res=s1*s2))
return s1 * s2
asequence = [1, 2, 3]
Дан initializer
функция запускается, применяя его к инициализатору и первому Iterable элементу:
cumprod = reduce(multiply, asequence, 5)
# Out: 5 * 1 = 5
# 5 * 2 = 10
# 10 * 3 = 30
print(cumprod)
# Out: 30
Без initializer
параметра reduce
начинается путем применения функции к первым двум элементам списка:
cumprod = reduce(multiply, asequence)
# Out: 1 * 2 = 2
# 2 * 3 = 6
print(cumprod)
# Out: 6
Накопительный продукт
import operator
reduce(operator.mul, [10, 5, -3])
# Out: -150
Вариант без короткого замыкания любой / все
reduce
не прекращает итерацию до iterable
были укомплектовать итерации , поэтому он может быть использован для создания нон короткого замыкания any()
или all()
функции:
import operator
# non short-circuit "all"
reduce(operator.and_, [False, True, True, True]) # = False
# non short-circuit "any"
reduce(operator.or_, [True, False, False, False]) # = True