a, b, n = 0, 1, 500
while a < n:
print(a)
a, b = b, a+b
а также
a, b, n = 0, 1, 500
while a < n:
print(a)
a = b
b = a+b
Оба дают разный результат.
В чем разница между a, b = b, a+b и a = b; b = a+b?






Приведенный ниже код похож на обмен.
a, b = b, a+b
Это как делать это
temp = a
a = b
b = temp + b
a, b = b, a+b
эквивалентно
tmp = a
a = b
b = tmp+b
Это не значения, разделенные запятыми. Вы выполняете распаковку кортежа.
a, b, n = 0, 1, 500
Такой же как:
a, b, n = (0, 1, 500)
Причина, по которой они разные, заключается в том, что первая строка присваивает b значение a, а затем добавляет вместе a и b. Это по сути то же самое, что и:
a = b
b = a+b
a, b, n = 0, 1, 500
while a < n:
print(a)
a = b
b = a+b
В приведенной выше строке кода - после печати (a) значение кода в переменной b будет присвоено первой, и, следовательно, значение a обновляется, и обновленное значение a используется в b = a + b
Допустим, а = 0, б = 1. Таким образом, после print(a) значение a сначала будет 1, а b будет иметь 1+1 = 2.
В то время как,
a, b, n = 0, 1, 500
while a < n:
print(a)
a, b = b, a+b
В приведенном выше коде после print(a) одновременно присваиваются значения a и b. В этом случае любое значение a, напечатанное в print(a), будет использоваться для присвоения значения a на следующем шаге.
Допустим, а = 0 и b = 1, после print(a), который сначала напечатает 0, значение в a будет 1, а значение в b будет 0+1 = 1, потому что b = a+b будет использовать a =0, а не a =1.