这个2 python代码的语法会发生什么?

时间:2016-01-26 19:57:43

标签: python syntax

这两个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

2 个答案:

答案 0 :(得分:2)

我会用的例子解释会发生什么

>>> a=b, c=[5,6]

之后,你有:

>>> a
[5, 6]
>>> b
5
>>> c
6

如您所见,它不会将b分配给a并将[5,6]分配给c。它的作用是将[5,6]分配给a,然后分配给bc(每个获得一个元素)。更清楚的写作方式是:

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