简单变量初始化(PYTHON)

时间:2016-08-05 18:30:56

标签: python python-2.7

当今天编写斐波那契数字所需的基本程序时,我遇到了以下情况来初始化两个变量x&在同一时间。

我最初写的

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

这显然无法同时初始化两者,因为因为x变为2导致y变为4,这不会跟随斐波那契序列。

必须用以下内容替换(在搜索之前我不知道是否可能):

x,y = y,x+y

因此产生正确的序列(x = 2和y = 3)

我的问题是为什么这有效?或者更具体地说,在该行代码的语法基础上的变量的内存分配发生了什么。我们是否告诉编译器在更改为y之前的值之前使用x的先前值更改y = x + y?

感谢所有帮助:)

2 个答案:

答案 0 :(得分:2)

赋值语句x=y和朋友)中,Python将始终在分配之前完全评估语句的右侧。在这种情况下,逗号分隔的内容会自动评估为元组(y, x+y)(2, 3)。然后它会尝试分配它们 - 它看到有两个要分配的东西和两个从元组中解压缩的值,此时它按顺序正确分配它们(first->first, second->second

答案 1 :(得分:1)

此分配以部分形式发生。

  1. 元组是从y, x+y创建的。
  2. 元组再次分解为两部分,通过元组解包分配给xy
  3. {<1}}将在创建元组之前计算,这在分配之前发生,因此它使用原始值。