Python 奇怪的内联赋值
在Python(2和3)中,我正在与这种奇怪的行为作斗争: 这导致:Python 奇怪的内联赋值,python,tuples,variable-assignment,Python,Tuples,Variable Assignment,在Python(2和3)中,我正在与这种奇怪的行为作斗争: 这导致: >>> a [1, 2] >>> a == [x, y] True 但是如果你写 >>> a = [1, 2] >>> a[a.index(1)], a[a.index(2)] = x, y 其中x,y!=2,1(可以是1,1,2,2,3,5,等等),这会导致: >>> a [1, 2] >>> a == [x,
>>> a
[1, 2]
>>> a == [x, y]
True
但是如果你写
>>> a = [1, 2]
>>> a[a.index(1)], a[a.index(2)] = x, y
其中x,y!=2,1
(可以是1,1
,2,2
,3,5
,等等),这会导致:
>>> a
[1, 2]
>>> a == [x, y]
True
正如人们所料。为什么a[a.index(1)],a[a.index(2)]=2,1
不产生结果a==2,1]
>>> a == [2, 1]
False
因为它实际上是这样解释的:
>>> a = [1, 2]
>>> a
[1, 2]
>>> a[a.index(1)] = 2
>>> a
[2, 2]
>>> a[a.index(2)] = 1
>>> a
[1, 2]
引用(我的重点):
- 如果目标列表是以逗号分隔的目标列表:对象必须是一个iterable,其项数必须与目标数相同 在目标列表中,项目从左到右分配给 相应的目标
a[a.index(1)]
(即a[0]
)的赋值发生在第二次赋值要求a.index(2)
之前,此时a.index(2)==0
您将在任何作业中看到相同的行为:
foo = [a, b]
foo[foo.index(a)], foo[foo.index(b)] = x, y
其中
x==b
(在本例中,右边第一个值为2
)的任何赋值。您问了一个奇怪的问题。为什么a[a.index(1)],a[a.index(2)]=2,1
我的意思是当要求a的值时。我在滥用符号。XDRelated(和devious):您能从文档中引用Python中的赋值顺序吗?向上投票并接受。谢谢你的出色工作!为什么a=1;a、 b=2,a
导致b==1
那么?您可能想在回答中讨论可变对象和不可变对象之间的区别。@pzp这不是可变对象和不可变对象,因为在任何赋值开始之前,右侧都已完全求值。对于可变的a
,也会发生同样的情况。