Python 无效语法(用于循环括号/括号)

Python 无效语法(用于循环括号/括号),python,syntax-error,Python,Syntax Error,以下代码行输出语法错误:无效语法 for (i in range(-WIDTH,WIDTH)): 下一个可以正常工作。我不知道这里的语法错误应该是什么。所以我只是出于好奇才这么问。我的猜测是括号阻止了表达式的求值 for i in range(-WIDTH,WIDTH): 您的括号实际上只是混淆了解析器 对于,在之后可以打开paren有几个原因,最明显的是使用元组解包: >>> for (x, y) in zip(range(5), range(6, 11)): ...

以下代码行输出语法错误:无效语法

for (i in range(-WIDTH,WIDTH)):
下一个可以正常工作。我不知道这里的语法错误应该是什么。所以我只是出于好奇才这么问。我的猜测是括号阻止了表达式的求值

for i in range(-WIDTH,WIDTH):

您的括号实际上只是混淆了解析器

对于,在
之后可以打开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中,paren可用于加载位置以进行简单分组,例如在分解长行时:

>>> 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循环的其余部分(在
表达式列表中)。然后你会得到一个更清晰的错误,关于它是如何解释这个陈述的

>>> for (i in range(-WIDTH, WIDTH)) in range(-WIDTH, WIDTH):
...   print(i)
... 
  File "<stdin>", line 1
SyntaxError: can't assign to comparison
>>对于范围内的(i(-WIDTH,WIDTH))范围内的(-WIDTH,WIDTH):
...   印刷品(一)
... 
文件“”,第1行
SyntaxError:无法分配给比较

因此,它可以让您这样做,但y中的x的结果将是布尔值,不能作为赋值的目标。你得到的最初错误是因为它在
中找到你的
之前进入了你的
,这是非常古老的无效语法,就好像你刚刚为x:

@cricket_007 OP写了
可能来自英国,在英国,调用
()
方括号是很常见的。@两位比特炼金术士
()
在英国被称为方括号,加拿大、新西兰和澳大利亚。看见话虽如此,任何在国际上从事任何时间编程的人都会使用“括号”和“方括号”这两个术语。新手需要被告知哪些词应该避免使用——这并不是自然而然的。不要让我从#开始。对于
循环,第一个
中不需要括号:
对于zip中的x,y(范围(5),范围(6,11)):
。元组是由逗号组成的。它们也被用作函数调用操作符(与
x=foo()相比
x=foo
),我没有说它们是必需的。我说他们是被允许的。这是关于解析器如何看待语句的。我看不出函数调用的使用可能有什么关系,但是如果你告诉我怎么做的话,我可以把它添加到答案中。在很多地方,括号是允许优先的。您提到tuple unpacking是“值得注意的”,但在tuple unpacking中很少需要它们。这是一种常见且容易产生的误解,即
[]
生成列表,因此
()
生成元组。我理解你关于函数调用的观点,我只是想想想在哪些地方使用括号会有所不同。
>>> for (i in range(-WIDTH, WIDTH)) in range(-WIDTH, WIDTH):
...   print(i)
... 
  File "<stdin>", line 1
SyntaxError: can't assign to comparison