在​​《第4.7节 Python特色的序列解包、链式赋值、链式比较》​​一文中,老猿这样介绍的:

链式赋值是用一行语句将多个变量赋值为同一个值,语法如下: 变量1=变量2=变量n=赋值表达式 该语法实际执行效果类似于:          变量n=赋值表达式          变量2=变量n          变量1=变量2 

有CSDN的博友Johnny592友情指出老猿这种解释错了,正确的应该是“ a=b=c=1 顺序是:a=1,b=a,c=a,有顺序”,老猿仔细验证了一下,证明Johnny592说得是正确的,证明过程如下:

>>> k,l=0,[10,20,30,40] >>> k=l[k]=3 >>> l  #下面的结果显示l[3]=3,说明k先被赋值为3,才有l[3]赋值为3 [10, 20, 30, 3] >>>  >>>> k,l=0,[10,20,30,40] >>> k=l[k]=l[l[k]-1]=3 >>> l #跟上面结果对比表明:l[k]-1=2,说明l[k]比l[l[k]-1]先执行赋值 [10, 20, 3, 3] >>>  

从上述案例执行结果可以看出,l[k]中的k是3,因此是k先赋值为3,再执行的l[k]的赋值。也就是说链式赋值是从左到右的顺序执行赋值的。

再次感谢Johnny592博友!!

再次订正:

经博友“码哥yoo_____”提醒,上面博文内容的说法还是有问题,正取的说法应该是:

a=b=c=d

赋值处理过程如下:

temp = d

a = temp

b=temp

c=temp