2016-08-05 4 views
0

При написании базовой программы, необходимой сегодня для чисел фибоначчи, я столкнулся со следующей ситуацией, чтобы инициализировать две переменные x & y одновременно.Простая инициализация переменных (PYTHON)

Я первоначально написал

x=1 
y=2 
...... 
x = y 
y = x+y 

Который явно не работает для инициализации и в то же время, потому что, поскольку х становится равным 2 приводит к у становится 4, который не соответствует последовательности Фибоначчи.

Он должен был быть заменен следующим образом (что я не знаю, возможно, прежде чем искать):

x,y = y,x+y 

И, таким образом, это дает правильную последовательность (х = 2 и у = 3)

Мой вопрос, почему это работает? Или, более конкретно, что происходит с распределением памяти переменных, лежащих в основе синтаксиса этой строки кода. Сообщаем компилятору изменить y = x + y с использованием предыдущего значения x до его изменения на предыдущее значение y?

Спасибо за помощь :)

ответ

2

В операторы присваивания (x=y и друзья), Python будет всегда полностью оценить правую сторону заявления перед назначением. В этом случае функции с разделителями-запятыми автоматически оцениваются в кортежах (y, x+y) или (2, 3). Затем он пытается попытаться назначить их, и он видит, что есть две вещи для назначения и два значения из кортежа для распаковки, и в какой момент он их правильно назначает (first->first, second->second)

+0

Не знаете, почему вы получили вниз. Это совершенно правильный ответ. –

1

Это назначение происходит по частям.

  1. Кортеж создан из y, x+y.
  2. Кортеж разбивается на две части, которые назначаются x и y через распаковку кортежа.

The x+y будет рассчитываться перед тем создается кортеж, который происходит перед назначением, поэтому он использует исходные значения.

+0

Ударьте меня почти идентичным ответом. +1 –

Смежные вопросы