这两个Python代码块会发生什么?
第一
a=0,b=1,c=1,r=(a,b)[c]
File "<stdin>", line 1
SyntaxError: can´t assign to literal
第二
r=(1,0)[1],a=1
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
答案 0 :(得分:2)
我会用做的例子解释会发生什么:
>>> a=b, c=[5,6]
之后,你有:
>>> a
[5, 6]
>>> b
5
>>> c
6
如您所见,它不会将b
分配给a
并将[5,6]
分配给c
。它的作用是将[5,6]
分配给a
,然后分配给b
和c
(每个获得一个元素)。更清楚的写作方式是:
a = (b, c) = [5,6]
所以当你尝试
时a=0,b=...
那么你实际上是在尝试为文字0
分配一些内容,这是不允许的,这就是错误信息告诉你的内容。
同样,在您的第二个示例r=(1,0)[1],a=1
中,您尝试将1
分配给r
(其中有效,r
实际上是1
之后)然后还将其分配给(1,0)[1],a
对,这不起作用,因为您无法为一对分配一个数字。这就像(a, b) = 1
。
答案 1 :(得分:1)
您需要使用;
来分隔赋值语句,如下所示:
a=0;b=1;c=1;r=(a,b)[c]
和
r=(1,0)[1];a=1