Python – Разница между объявлением значения переменной в функции Фибоначчи

Я как бы новичок в python. Я смотрел на один из типов, чтобы сделать функцию фибоначчи,

def fib(n): a=0 b=1 while a<n: print a a,b=b,a+b 

и я увидел объявление a, b = b, a + b. Итак, я думал, что a = b и b = a + b одинаковы для a, b = a, b + a, поэтому я изменил функцию, чтобы она была такой:

 def fib(n): a=0 b=1 while a<n: print a a=b b=a+b 

и я думал, что это будет правильно, но когда я выполнил программу, у меня появился другой результат. Может ли кто-нибудь объяснить мне разницу между этими двумя типами декларации?

Спасибо, в любом случае.

  • Инвертировать ось в matplotlib grafic
  • Pandon pandas: чтение пропущенных файлов
  • Python Twisted: ограничение доступа по IP-адресу
  • Ошибка: ни один модуль с именем staticfiles
  • Как отсортировать список значений времени Python?
  • Python - проблема SSL с Oauth2
  • Создание Pandas DataFrame с массивом numpy, содержащим несколько типов
  • Получение URL гиперссылки из документа Excel
  • 4 Solutions collect form web for “Python – Разница между объявлением значения переменной в функции Фибоначчи”

    Когда Python выполняет

     a,b = b, a+b 

    сначала он оценивает правую часть , затем распаковывает кортеж и присваивает значения a и b . Обратите внимание, что a+b в правой части использует старые значения для a .

    Когда Python выполняет

     a=b b=a+b 

    он оценивает значение b и присваивает его значение a . Затем он оценивает a+b и присваивает это значение b . Обратите внимание, что a+b использует новое значение для a .

    b, a+b создает кортеж, содержащий эти два значения. Затем a, b = ... распаковывает кортеж и присваивает его значения переменным. В вашем коде, однако, вы перезаписываете значение первого, поэтому вторая строка использует новое значение.

     a, b = b, a + b 

    примерно равна:

     tmp = a a = b b = tmp + b 

    Этот синтаксис одновременно присваивает новые значения a и b на основе текущих значений. Причина, по которой это не эквивалентно, заключается в том, что при написании двух отдельных операторов второе присваивание использует новое значение a вместо старого значения a .

    В первом примере a не обновляется, чтобы принять значение b до тех пор, пока вся строка не будет оценена – так что b на самом деле a + b.

    В вашем примере вы уже установили a в b, поэтому последняя строка (b = a + b) может быть так же легко b = b + b.

    Это все в порядке, в котором вещи оцениваются.

    Python - лучший язык программирования в мире.