Python中的多重赋值和评估顺序
以下Python表达式有什么区别:
# First: x,y = y,x+y # Second: x = y y = x+y 首先给出不同的结果比秒 。
例如,
第一:
 >>> x = 1 >>> y = 2 >>> x,y = y,x+y >>> x 2 >>> y 3 
第二:
 >>> x = 1 >>> y = 2 >>> x = y >>> y = x+y >>> x 2 >>> y 4 
y是第一个是3, 第二个是4
在赋值语句中,在进行变量的实际设置之前,总是对右手边进行充分评估。 所以,
 x, y = y, x + y 
 评估y (我们称之为结果ham ),评估x + y (称为spam ), 然后将x设为ham and y为spam 。 也就是说 
 ham = y spam = x + y x = ham y = spam 
相比之下,
 x = y y = x + y 
 将x设置为y ,然后将y设置为x (其中== y )加上y ,所以相当于 
 x = y y = y + y 
在“评估命令”一节的文档中对此进行了解释:
…在评估任务时,在左侧之前评估右侧。
第一个表达式:
-  创建一个值为y,x+y的临时元组
- 分配给另一个临时元组
-  将元组提取到变量x和y
第二个语句实际上是两个表达式,没有元组的用法。
令人惊讶的是,第一个表达其实是:
 temp=x x=y y=temp+y 
你可以在“ 括号表单 ”中了解更多关于逗号的用法。
 在第二种情况下,您将x+y分配给x 
 在第一种情况下,第二个结果( x+y )被分配给y 
这就是为什么你获得不同的结果。
在你编辑之后
这是因为在声明中
 x,y = y,x+y 
评估右侧成员的所有变量,然后存储在左侧成员中。 因此, 先与正确的成员进行,然后与左边的成员进行。
在第二个声明
 x = y y = x + y 
 哟首先评估y并将其分配给x ; 这样, x+y的总和相当于y+y的总和,而不是x+x的总和,这是第一种情况。 
第一个是类似tuple的任务:
 x,y = y,x+y 
 其中x是元组的第一个元素, y是第二个元素,所以你在做什么: 
 x = y y = x+y 
第二个是做一个直接分配:
 x=y x=x+y 
 a, b = 0, 1 while b < 10: print(b) a, b = b, a+b 
产量
 1 1 2 3 5 8 
变量a和b同时得到新值0和1,同样的a,b = b,a + b,a和b是同时赋值的。