Python 的逗号运算符在赋值时如何工作?
- 2025-03-21 09:07:00
- admin 原创
- 23
问题描述:
我正在阅读 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 的值将首先被分配,对吗?我遗漏了什么吗?
解决方案 1:
在进行任何赋值之前,赋值运算符右边的所有表达式都会被求值。
摘自Python 教程:编程的第一步:
第一行包含一个多重赋值:变量 a 和 b 同时获得新值 0 和 1。最后一行再次使用此方法,表明在执行任何赋值之前,右侧的表达式都会先进行求值。右侧表达式的求值顺序是从左到右。
强调我的。
您的代码在功能上等同于以下内容:
a, b = 5 + 4, 5
print a, b
解决方案 2:
Python 没有像 C 那样的“逗号运算符”。相反,逗号表示应该构造一个元组。
a, b = a + b, a
是一个包含两个项a + b
和的元组a
。
在赋值语句的左边,逗号表示应该按照您引用的规则执行序列解包:a
将分配元组的第一个元素,b
第二个元素。
解决方案 3:
您可以将分配视为在副本上并行发生,而不是顺序和就地发生。
这就是为什么在 Python 中不需要交换函数:
a, b = b, a
不需要临时变量就可以充分工作c
。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD