为什么`sum`需要`start`参数?

时间:2017-06-27 15:28:17

标签: python python-3.x

例如,要计算timedelta列表的总和,我们需要在下面写一下:

sum(l, timedelta())

(l是timedelta

的实例列表

但是我们可以在没有start变量的情况下计算出来,比如

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

为什么内置sum函数需要start值?

修改

如果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] 没有起始价值就能很好地工作。

我不明白为什么总和不能这样工作。

1 个答案:

答案 0 :(得分:2)

sum大致相当于以下函数:

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

这是典型的用例:

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

但是如果你想将它与一个没有定义整数加法的对象一起使用,你需要定义起始值。例如,如果要展平嵌套列表。

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