Давайте заглянем.
a, b = b, a + b
Это назначение кортежа, означает (a, b) = (b, a + b)
, как (a, b) = (b, a)
Начните с быстрого примера:
a, b = 0, 1
#equivalent to
(a, b) = (0, 1)
#implement as
a = 0
b = 1
Когда приходит к (a, b) = (b, a + b)
EAFP, попробуйте прямо
a, b = 0, 1
a = b #a=b=1
b = a + b #b=1+1
#output
In [87]: a
Out[87]: 1
In [88]: b
Out[88]: 2
Однако
In [93]: a, b = b, a+b
In [94]: a
Out[94]: 3
In [95]: b
Out[95]: 5
Результат отличается от первой попытки.
Tha, потому что Python сначала оценивает правую a+b
. Это эквивалентно:
old_a = a
old_b = b
c = old_a + old_b
a = old_b
b = c
Таким образом, a, b = b, a+b
означает, что a
обменивается, чтобы получить old_value из b
, b
, чтобы получить сумму старого значения a
и старое значение b
,