语法无效(For 循环 brackets/parentheses)
Invalid Syntax (For Loop brackets/parentheses)
下面这行代码输出SyntaxError: invalid syntax
for (i in range(-WIDTH,WIDTH)):
下一个没有错误。我不知道这里应该有什么语法错误。所以我只是出于好奇而问。我的猜测是方括号阻止了对表达式的求值。
for i in range(-WIDTH,WIDTH):
你的括号基本上只是混淆了解析器。
在 for
之后有一个开放括号的原因有几个,最值得注意的是使用元组解包:
>>> for (x, y) in zip(range(5), range(6, 11)):
... print(x, '->', y)
...
0 -> 6
1 -> 7
2 -> 8
3 -> 9
4 -> 10
此外,parens 可用于 Python 中的大量位置以进行简单分组,例如在拆分长行时:
>>> 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'
所以解析器不会真的抱怨它。
但是,如您所知,for
是 supposed to read like this:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
这意味着通过这种方式分组,您正在构造一个无效循环。本质上,你读到没有 in
因为它被你的括号分组到 target_list
中。希望这是有道理的。
一种更清楚地了解正在发生的事情的方法:在闭括号之后写下 for 循环的其余部分(在 expression_list
中)。然后你会得到一个关于它如何解释这个语句的更清楚的错误。
>>> for (i in range(-WIDTH, WIDTH)) in range(-WIDTH, WIDTH):
... print(i)
...
File "<stdin>", line 1
SyntaxError: can't assign to comparison
所以它会让你这样做,但是x in y
的结果将是一个布尔值,它不能作为赋值的目标。你得到的原始错误是因为它在找到你的 in
之前到达了你的 :
,这是普通的旧无效语法,就好像你刚刚写了 for x:
.
下面这行代码输出SyntaxError: invalid syntax
for (i in range(-WIDTH,WIDTH)):
下一个没有错误。我不知道这里应该有什么语法错误。所以我只是出于好奇而问。我的猜测是方括号阻止了对表达式的求值。
for i in range(-WIDTH,WIDTH):
你的括号基本上只是混淆了解析器。
在 for
之后有一个开放括号的原因有几个,最值得注意的是使用元组解包:
>>> for (x, y) in zip(range(5), range(6, 11)):
... print(x, '->', y)
...
0 -> 6
1 -> 7
2 -> 8
3 -> 9
4 -> 10
此外,parens 可用于 Python 中的大量位置以进行简单分组,例如在拆分长行时:
>>> 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'
所以解析器不会真的抱怨它。
但是,如您所知,for
是 supposed to read like this:
for_stmt ::= "for" target_list "in" expression_list ":" suite
["else" ":" suite]
这意味着通过这种方式分组,您正在构造一个无效循环。本质上,你读到没有 in
因为它被你的括号分组到 target_list
中。希望这是有道理的。
一种更清楚地了解正在发生的事情的方法:在闭括号之后写下 for 循环的其余部分(在 expression_list
中)。然后你会得到一个关于它如何解释这个语句的更清楚的错误。
>>> for (i in range(-WIDTH, WIDTH)) in range(-WIDTH, WIDTH):
... print(i)
...
File "<stdin>", line 1
SyntaxError: can't assign to comparison
所以它会让你这样做,但是x in y
的结果将是一个布尔值,它不能作为赋值的目标。你得到的原始错误是因为它在找到你的 in
之前到达了你的 :
,这是普通的旧无效语法,就好像你刚刚写了 for x:
.