Функция reduce

Введение

Примеры

  • 3

    обзор

     # 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 
  • 1

    Используя уменьшить

     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 
  • 1

    Накопительный продукт

     import operator
    reduce(operator.mul, [10, 5, -3])
    # Out: -150 
  • 0

    Вариант без короткого замыкания любой / все

    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 

Синтаксис

Параметры

Примечания