Python a, b = b, a + b

Это мой первый вопрос, и я начал изучать Python, поэтому я просто спрошу. Есть ли разница между:

a, b = b, a + b and a = b b = a + b 

когда вы пишете его в приведенном ниже примере, он показывает разные результаты.

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

5 Solutions collect form web for “Python a, b = b, a + b”

В a, b = b, a + b , выражения в правой части оцениваются перед назначением левой стороне. Таким образом, это эквивалентно:

 c = a + b a = b b = c 

Во втором примере значение a уже было изменено на время b = a + b . Следовательно, результат отличается.

Линия:

 a, b = b, a + b 

ближе к:

 temp_a = a a = b b = temp_a + b 

где b использует старое значение a до того, как a было переназначено до значения b .

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

См. Как происходит переключение элементов в кортежах python (a, b) = (b, a) внутри? для низкого уровня того, как все это работает, на уровне байт-кода.

Предположим, что мы начинаем с a и b следующим образом:

 a = 2 b = 3 

Итак, когда вы это сделаете:

 a, b = b, a + b 

что происходит, вы создаете кортеж (b, a + b) или (3, 5) а затем распаковываете его в a и b a становится 3 а b становится 5 .

Во втором примере:

 a = b # a is now 3 b = a + b # b is 3 + 3, or 6. 

Я надеюсь, что на вас не повлиял язык C, приоритет оператора присваивания = выше, чем у оператора Comma. Не думайте, что это (a), (b = b), (a + b) … Это назначение кортежа.

a, b = b, a + b аналогично a, b = 0, 1 присваивая значения обеим переменным a, b в одно и то же время. Сначала назначьте a = b а затем b = a + b .

  • Каков максимальный лимит запросов Google Appengine Ndb GQL?
  • Как получить текущее время Великобритании в Google App Engine
  • python webbrowser.open (url)
  • Проверка символа - полная или полуширина в Python
  • Идентичность методов класса
  • Переопределение следующей функции экземпляра
  • MasterPage как концепция в python
  • Установка пакета .whl Python в определенный каталог, отличный от стандартного
  • Указание числа десятичных знаков в Python
  • Как получить базовый URI в AppEngine?
  • В чем разница между Python и Jython против IronPython vs wxPython?
  •  
    Interesting Posts for Van-Lav

    Утечка памяти в поточном COM-объекте с Python

    сравнивая два dict в python, чтобы получить максимальное значение для аналогичного ключа

    Boost.Python вызывает по ссылке: TypeError: нет конвертера to_python (по значению) для типа C ++:

    Как удалить все экземпляры символа в строке в python?

    Умножение между 2 списками

    Могу ли я использовать __init__.py для определения глобальных переменных?

    Переопределение метода добавления после наследования из списка Python

    Как исправить «Попытка относительного импорта в не-пакет» даже с __init__.py

    получение понедельника, 5 июня 2016 года, а не 5 июня 2016 года с использованием DateTimeField

    Как реплицировать C # 'byte' и 'Write' в Python

    Включая статические данные в setup.py (setuptools)

    Проверка валидации в WTForms не обновляется, когда база данных

    Nohup и Python -u: он по-прежнему не регистрирует данные в реальном времени

    Python – ConnectionError: превышено максимальное количество попыток

    Вложенные классы python

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