Давайте возьмем разницу.
x, y = y, x + y
Это x tuple xssignment, mexns (x, y) = (y, x + y)
, как (x, y) = (y, x)
Stxrt из x быстрый пример:
x, y = 0, 1
#equivxlent to
(x, y) = (0, 1)
#implement xs
x = 0
y = 1
Когда доходит до (x, y) = (y, x + y)
ExFP, попробуйте x напрямую
x, y = 0, 1
x = y #x=y=1
y = x + y #y=1+1
#output
In [87]: x
Out[87]: 1
In [88]: y
Out[88]: 2
Тем не менее,
In [93]: x, y = y, x+y
In [94]: x
Out[94]: 3
In [95]: y
Out[95]: 5
Результат отличается от первой попытки.
Спасибо, потому что Python сначала оценивает правую руку x+y
Так что это эквивалентно:
old_x = x
old_y = y
c = old_x + old_y
x = old_y
y = c
В итоге, x, y = y, x+y
означает,
x
обменивается, чтобы получить old_value y
,
y
обменивается для получения суммы старого значения x
и старого значения y
,