例如,要计算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]
没有起始价值就能很好地工作。
我不明白为什么总和不能这样工作。
答案 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]