在《第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