繁体   English   中英

Python的逗号运算符在分配期间如何工作?

[英]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的值? 我想念什么吗?

在进行任何赋值之前,将评估赋值运算符右边的所有表达式。

Python教程中:编程的第一步

第一行包含多个赋值:变量a和b同时获得新值0和1。在最后一行再次使用它,表明右侧的表达式在任何赋值之前都首先被求值发生 右侧表达式从左到右计算。

强调我的。

您的代码在功能上等效于以下代码:

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

Python没有C语言中的“逗号运算符”。相反,逗号表示应构造一个元组。 的右侧

a, b = a + b, a

是具有两个项a + ba的元组。

在作业的左侧,逗号表示应按照您引用的规则执行序列拆包: a将分配给元组的第一个元素, b将分配给第二个元素。

您可以想到分配在副本上并行发生,而不是顺序和就地发生。

这就是为什么在python中不需要交换函数的原因:

a, b = b, a

无需温度变量c即可充分工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM