2017-06-27 6 views
-1

Zum Beispiel Summe der timedelta Liste zu berechnen, müssen wir weiter unten schreiben:Warum benötigt `sum`` start` Parameter?

sum(l, timedelta()) 

(l Liste der Instanzen von timedelta)

Aber wir können ohne die start Variable berechnen, dass, wie

l[0] + l[1] + l[2] + ... 

Warum die eingebaute sum Funktion braucht start Wert?

EDIT

Wenn die sum Funktion definiert wie

def sum2(l): 
    return l[0] + (sum2(l[1:]) if len(l) > 2 else l[1]) 

und bekam sum2([[1, 2], [2, 4], [3, 5]]) -> [1, 2, 2, 4, 3, 5] Arbeit gut ohne Startwert.

Ich verstehe nicht, warum Summe nicht so funktioniert.

+2

Es wird kein Startwert benötigt. Was hat dich dazu gebracht zu denken? –

+0

'Summe ([1,1,1]) = 3 '. 'sum ([], 10) = 10'. –

+0

@ Ev.Kounis Sie müssen einen Startwert angeben, wenn Ihr iterierbares Element andere Elemente als Zahlen enthält, der Standardstartwert ist "0". –

Antwort

2

sum entspricht in etwa der folgenden Funktion:

def sum(iter, start=0): 
    for element in iter: 
     start = start + iter 
    return start 

Dies ist der typische Anwendungsfall:

sum([1, 2, 3]) -> 6 

Aber wenn Sie es mit einem Objekt verwenden, die nicht integer nicht definiert Zusätzlich müssen Sie den Startwert definieren. Zum Beispiel, wenn Sie eine verschachtelte Liste reduzieren möchten.

sum([[1, 2], [2, 4], [3, 5]], []) -> [1, 2, 2, 4, 3, 5]