[英]How does Python's comma operator works during assignment?
我正在阅读Python文档( http://docs.python.org/reference/simple_stmts.html#assignment-statements )中的赋值语句。
在其中引用:
如果目标是用括号或方括号括起来的目标列表:该对象必须是可迭代的,并且具有与目标列表中存在目标的项目数量相同的项目,并且其项目从左到右分配给相应的项目。目标。
阅读之后,我想到了编写这样的示例:
a = 5
b = 4
a, b = a + b, a
print a, b
我的假设是a和b的值都应为9。
但是,事实证明我错了。 'a'的值为9,'b'的值为5。
有人可以帮助我更好地理解这一点吗? 为什么要分配旧值“ a”而不是新值? 根据文档,将首先分配a的值? 我想念什么吗?
在进行任何赋值之前,将评估赋值运算符右边的所有表达式。
第一行包含多个赋值:变量a和b同时获得新值0和1。在最后一行再次使用它,表明右侧的表达式在任何赋值之前都首先被求值发生 。 右侧表达式从左到右计算。
强调我的。
您的代码在功能上等效于以下代码:
a, b = 5 + 4, 5
print a, b
Python没有C语言中的“逗号运算符”。相反,逗号表示应构造一个元组。 的右侧
a, b = a + b, a
是具有两个项a + b
和a
的元组。
在作业的左侧,逗号表示应按照您引用的规则执行序列拆包: a
将分配给元组的第一个元素, b
将分配给第二个元素。
您可以想到分配在副本上并行发生,而不是顺序和就地发生。
这就是为什么在python中不需要交换函数的原因:
a, b = b, a
无需温度变量c
即可充分工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.