Python Language                
            Verminderen
        
        
            
    Zoeken…
Syntaxis
- verminderen (functie, iterabel [, initialisatie])
parameters
| Parameter | Details | 
|---|---|
| functie | functie die wordt gebruikt voor het verminderen van de iterabele (moet twee argumenten hebben). ( alleen positioneel ) | 
| iterable | iterable dat zal worden verminderd. ( alleen positioneel ) | 
| initializer | startwaarde van de reductie. ( optioneel , alleen positioneel ) | 
Opmerkingen
 reduce misschien niet altijd de meest efficiënte functie. Voor sommige typen zijn er equivalente functies of methoden: 
- sum()voor de som van een reeks met toevoegbare elementen (geen tekenreeksen):- sum([1,2,3]) # = 6
- str.joinvoor de aaneenschakeling van strings:- ''.join(['Hello', ',', ' World']) # = 'Hello, World'
- nexttezamen met een generator kan kortsluiting variant vergelijking te- reduce:- # First falsy item: next((i for i in [100, [], 20, 0] if not i)) # = []
Overzicht
# 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 vermindert een iterabel door een functie herhaaldelijk toe te passen op het volgende element van een iterable en het cumulatieve resultaat tot nu toe. 
def add(s1, s2):
    return s1 + s2
asequence = [1, 2, 3]
reduce(add, asequence)  # equivalent to: add(add(1,2),3)
# Out: 6
 In dit voorbeeld hebben we onze eigen add functie gedefinieerd. Python wordt echter geleverd met een standaard equivalente functie in de operator : 
import operator
reduce(operator.add, asequence)
# Out: 6
 reduce kan ook een startwaarde worden doorgegeven: 
reduce(add, asequence, 10)
# Out: 16
Gebruik verkleinen
def multiply(s1, s2):
    print('{arg1} * {arg2} = {res}'.format(arg1=s1, 
                                           arg2=s2, 
                                           res=s1*s2))
    return s1 * s2
asequence = [1, 2, 3]
 Bij een initializer de functie gestart door deze toe te passen op de initialisatie en het eerste itereerbare element: 
cumprod = reduce(multiply, asequence, 5)
# Out: 5 * 1 = 5
#      5 * 2 = 10
#      10 * 3 = 30
print(cumprod)
# Out: 30
 Zonder initializer begint het reduce door de functie toe te passen op de eerste twee lijstelementen: 
cumprod = reduce(multiply, asequence)
# Out: 1 * 2 = 2
#      2 * 3 = 6
print(cumprod)
# Out: 6
Cumulatief product
import operator
reduce(operator.mul, [10, 5, -3])
# Out: -150
Niet-kortsluitvariant van alle / alle
 reduce zal de iteratie niet beëindigen voordat de iterable volledig is herhaald, zodat het kan worden gebruikt om een functie any() of all() te maken die geen kortsluiting veroorzaakt: 
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
Eerste waarheidsgetrouwe / vals element van een reeks (of het laatste element als er geen is)
# First falsy element or last element if all are truthy:
reduce(lambda i, j: i and j, [100, [], 20, 10])    # = []
reduce(lambda i, j: i and j, [100, 50, 20, 10])    # = 10
# First truthy element or last element if all falsy:
reduce(lambda i, j: i or j, [100, [], 20, 0])     # = 100
reduce(lambda i, j: i or j, ['', {}, [], None])   # = None
 In plaats van het creëren van een lambda -functie wordt in het algemeen aan te raden om een benoemde functie te maken: 
def do_or(i, j):
    return i or j
def do_and(i, j):
    return i and j
reduce(do_or, [100, [], 20, 0])                   # = 100
reduce(do_and, [100, [], 20, 0])                  # = []