我知道有关Python中多重赋值的基本规则:
但实际上我遇到了一些非常不同而且有点复杂的东西;我想知道我是否可以依赖它。在调试算法时,我突然发现一个错误与该行有关:
k[s], k[p] = k[p], None
因为我的算法找到了s
和p
相等的情况。显然,在这种情况下,最终值为k[s]=k[p]=None
。
在那个非常具体的案例中,我更喜欢以下结果:
k[p], k[s] = None, k[p]
在所有情况下都表现得如我所愿,即使p == s
也是如此。在这种情况下,显然k[p]
最初取值None
,然后取值k[p]
。
当然我知道为了拥有更易读的代码,进行一次测试可能是一个好主意,但我非常想知道该语言的政策在那个鲜为人知的案例中: em>当多个赋值中同一个变量受到两次影响时会发生什么?
答案 0 :(得分:2)
是的,你应该能够依赖它。
如果目标列表是以逗号分隔的目标列表:对象必须是一个可迭代的项目数与目标列表中的目标相同,并且项目已分配,从从左到右,对应相应的目标。
(强调我的)
k[s], k[s] = k[s], None
相当于
t = k[s]
k[s] = t
k[s] = None
附注:当右侧是动态可迭代时,评估顺序也成立,例如发电机。首先提取所有必要的元素,然后从左到右分配。
答案 1 :(得分:1)
python docs给出了答案:
如果目标列表是以逗号分隔的目标列表:该对象必须是具有与目标列表中的目标相同数量的项目的可迭代项,并且项目已分配给
from left to right
,以相应的目标。