2017-06-27 11 views
-1

例えば、timedeltaリストの合計を計算するために、我々は以下の記述する必要があります。`sum`に` start`パラメータが必要なのはなぜですか?

sum(l, timedelta()) 

(lはtimedeltaのインスタンスのリストです)

しかし、我々は

のように、 start変数せずにこれを計算することができます

組み込みの理由sum機能にはstartの値が必要ですか?

EDIT

sum機能が

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

のように定義し、開始値なしでうまくsum2([[1, 2], [2, 4], [3, 5]]) -> [1, 2, 2, 4, 3, 5] 仕事を得た場合。

このように合計が機能しない理由はわかりません。これは典型的なユースケースである

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

+2

開始値は必要ありません。あなたはそれを何と考えましたか? –

+0

'sum([1,1,1])= 3'である。 'sum([]、10)= 10'です。 –

+0

@ Ev.Kounis iterableに数字以外の項目が含まれている場合は、開始値を指定する必要があります。デフォルトの開始値は「0」です。 –

答えて

2

sumは、以下の機能とほぼ同等です

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

しかし、あなたは整数を定義していないオブジェクトとそれを使用したい場合さらに、開始値を定義する必要があります。たとえば、ネストされたリストをフラット化する場合。

sum([[1, 2], [2, 4], [3, 5]], []) -> [1, 2, 2, 4, 3, 5] 
関連する問題