如何分配期间Python的逗号操作符?(How does Python's comma op

2019-06-17 11:13发布

我读的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”旧值分配,而不是新的? 按照该文件,一个的值将被指派的第一吧? 我缺少的东西吗?

Answer 1:

任何分配由之前的所有表达式赋值运算符的右边进行评估。

从Python的教程:一是对编程步骤 :

第一行包括了复合参数:变量a和b同时得到新值0和1。在此再次使用的最后一行,这表明在右手边的表达式都先评估之前任何分配发生 。 右手边的表达式由左到右评价。

重点煤矿。

您的代码在功能上等同于以下内容:

a, b = 5 + 4, 5
print a, b


Answer 2:

Python没有一个“逗号操作符”,如C.相反,逗号表明元组应该如何构造。 的右侧

a, b = a + b, a

是与第2项的元组a + ba

在赋值的左手侧,逗号表示序列拆包应根据你所引用的规则来执行: a将被分配的元组的第一个元素, b的第二个。



Answer 3:

你可以把工作分配上的副本,而不是按顺序和就地并行发生的。

这就是为什么在Python中,你不需要交换功能:

a, b = b, a

工作充分而无需临时变量, c



文章来源: How does Python's comma operator works during assignment?