这是python3中的递归函数。我有一种感觉,我不完全理解return语句中的if
else
逻辑。
items = [3,5,8,6,1,2,10]
def sum(items):
head, *tail = items
return head + sum(tail) if tail else head
请解释return
声明中的内容。
答案 0 :(得分:3)
我相信你被整个事情的*tail
部分搞糊涂了:
>>> items = [3,5,8,6,1,2,10]
>>> head, *tail = items
>>> head
3
>>> tail
[5, 8, 6, 1, 2, 10]
现在,当你到达列表的末尾时会发生这种情况,因为列表*tail
中只有一个项目返回一个空列表:
>>> items = [3]
>>> head, *tail = items
>>> head
3
>>> tail
[]
在这种情况下,函数只返回head
的值。
因此,要解释您的三元声明,(True) if (condition) else (False)
:
head + sum(tail) if tail else head
添加头部列表其余部分的总和。所以sum
不断打破它,然后最终点击基本情况,即如果列表中只有一个项目,则返回该项目。 This link将更详细地解释这是如何运作的。