thi*_*dam 27 python tuples comma variable-assignment
我正在阅读Python文档中的赋值语句(http://docs.python.org/reference/simple_stmts.html#assignment-statements).
因此引用:
如果目标是括在括号中或方括号中的目标列表:对象必须是与目标列表中的目标具有相同数量的项目的可迭代对象,并且其项目从左到右分配给相应的目标.
读完之后,我想写一个这样的样本:
a = 5
b = 4
a, b = a + b, a
print a, b
Run Code Online (Sandbox Code Playgroud)
我的假设是a和b都应该具有9的值.
但是,我被证明是错的.'a'的值为9,'b'的值为5.
有人可以帮助我更好地理解这一点吗?为什么要分配旧值'a'而不是新值?根据文档,首先会分配一个值?我错过了什么吗?
Mar*_*ers 32
在进行任何赋值之前,将评估赋值运算符右侧的所有表达式.
第一行包含多个赋值:变量a和b同时获取新值0和1.在最后一行再次使用它,证明右侧的表达式在任何赋值之前都是首先计算的发生.右侧表达式从左到右进行评估.
强调我的.
您的代码在功能上等同于以下内容:
a, b = 5 + 4, 5
print a, b
Run Code Online (Sandbox Code Playgroud)
Sve*_*ach 19
Python没有像C中那样的"逗号运算符".相反,逗号表示应该构造元组.右边的
a, b = a + b, a
Run Code Online (Sandbox Code Playgroud)
是一个元组与两个项目a + b和a.
在赋值的左侧,逗号表示应根据引用的规则执行序列解包:a将分配元组的第一个元素,b第二个元素.
Pre*_*eti 17
您可以考虑在副本上并行发生的分配,而不是顺序和就地.
这就是为什么在python中你不需要交换功能:
a, b = b, a
Run Code Online (Sandbox Code Playgroud)
无需临时变量即可充分发挥作用c.
| 归档时间: |
|
| 查看次数: |
23447 次 |
| 最近记录: |