我读的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”旧值分配,而不是新的? 按照该文件,一个的值将被指派的第一吧? 我缺少的东西吗?
任何分配由之前的所有表达式赋值运算符的右边进行评估。
从Python的教程:一是对编程步骤 :
第一行包括了复合参数:变量a和b同时得到新值0和1。在此再次使用的最后一行,这表明在右手边的表达式都先评估之前任何分配发生 。 右手边的表达式由左到右评价。
重点煤矿。
您的代码在功能上等同于以下内容:
a, b = 5 + 4, 5
print a, b
Python没有一个“逗号操作符”,如C.相反,逗号表明元组应该如何构造。 的右侧
a, b = a + b, a
是与第2项的元组a + b
和a
。
在赋值的左手侧,逗号表示序列拆包应根据你所引用的规则来执行: a
将被分配的元组的第一个元素, b
的第二个。
你可以把工作分配上的副本,而不是按顺序和就地并行发生的。
这就是为什么在Python中,你不需要交换功能:
a, b = b, a
工作充分而无需临时变量, c
。