Функция reduce

Введение

Примеры

Обзор

 # 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 

Синтаксис

Параметры

Примечания