你的括号基本上只是混淆了解析器.
有一些原因你可以在for之后有一个开放的paren,最值得注意的是使用元组解包:
>>> for (x,y) in zip(range(5),range(6,11)):
... print(x,'->',y)
...
0 -> 6
1 -> 7
2 -> 8
3 -> 9
4 -> 10
此外,可以在Python的大量地方使用parens进行简单分组,例如分解长行时:
>>> s = ("This is "
... "a really awkward way "
... "to write a "
... "long string "
... "over several lines")
>>>
>>> s
'This is a really awkward way to write a long string over several lines'
所以解析器不会真的抱怨它.
但是,如您所知,对于supposed to read like this:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
这意味着通过这种方式分组,您构建了一个无效循环.从本质上讲,你的内容是因为它被括号括起来归入target_list.希望这是有道理的.
一种更清楚地了解正在发生的事情的方法:在关闭paren之后写下for循环的其余部分(在expression_list中).然后,您将更清楚地了解它是如何解释此声明的.
>>> for (i in range(-WIDTH,WIDTH)) in range(-WIDTH,WIDTH):
... print(i)
...
File "",line 1
SyntaxError: can't assign to comparison
所以它会让你这样做,但y中x的结果将是一个布尔值,它不能作为赋值的目标.你得到的原始错误是因为它找到了你的:在它找到你的之前,这是一个简单的旧的无效语法,就像你刚写的x:.