Python 的逗号运算符在赋值过程中是如何工作的?

新手上路,请多包涵

我正在阅读 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 的值将首先分配,对吗?我错过了什么吗?

原文由 thiruvenkadam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

在进行任何赋值之前,赋值运算符右侧的所有表达式都会被求值。

来自 Python 教程:编程的第一步

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

强调我的。

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

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

原文由 Mark Byers 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

a, b = a + b, a

是一个包含两个项目 a + ba 的元组。

在分配的左侧,逗号表示应根据您引用的规则执行序列解包: a 将分配元组的第一个元素, b 第二。

原文由 Sven Marnach 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题