Согласно pythontutor последнее значение y list равно 5, и это сделает возвращаемое значение 1000 + sum([2,3])
1005, правильно ли?
Нет, последнее значение y
- []
. Это ни что иное, как список, и, кроме того, для него никогда не было 5
. Кроме того, рекурсивное возвращаемое значение всегда справа от +
, только слева находится x
.
Давайте шаг через него:
sum([1, 2, 3]) = 1 + sum([2, 3])
sum([2, 3]) = 2 + sum([3])
sum([3]) = 1000
Таким образом, подставляя обратно:
sum([2, 3]) = 2 + 1000 = 1002
sum([1, 2, 3] = 1 + 1002 = 1003
Проблема заключается в том, что, когда y
пуст, вы возвращение 1000
, не x + 1000
.
Ваше замешательство может быть просто вопросом приоритета. Может быть, вы ожидали, это:
return x + sum(y) if y else 1000
... иметь в виду, это:
return x + (sum(y) if y else 1000)
... но на самом деле, это означает следующее:
return (x + sum(y)) if y else 1000
Что такое этот синтаксис: 'x, * y = l'? это python 3? – Elisha
@ Elisha он распакует остальную часть l на y. –
Я догадался, но это не работает на python2.7. Я думаю, что лучше добавить тег 'python3' – Elisha