if和for周围的括号

4

我是一名Python新手,有一个问题。为什么if语句可以使用括号而for循环不可以。

  1. if (1==2):

  2. for (i in range(1,10)):

  3. while (i<10):

第一个和第三个都是有效的语法,但第二个不是。

File "<stdin>", line 2
    for (i in range(1,10)):
                          ^

我认为他想知道为什么第二个语句无效。 - Jayanth Koushik
你可以使用 for i in range(1, 10):,但最好不要在这样的语句中使用不必要的括号。 - RemcoGerlich
2个回答

7

因为 for (i in range(1,10)) 不符合语法规范。

假设 (i in range(1,10)) 已被解析,它将返回一个布尔值。所以你试图说的是 for True 或者 for False,而布尔值不能被迭代,这是无效的语法。


你的其他例子之所以起作用是因为它们期望一个布尔值,而 1 == 2i < 10 返回的就是布尔值。


(即使这样,i也未被定义)...那只是一个例子,他可以在任何地方定义它。 - Vamsi Krishna
@VamsiKrishna 因此是“即使如此”的意思 ;) - TerryA
答案是正确的,但那个陈述似乎不相关。所以我想提一下。 ;) - Vamsi Krishna
是的,这只是一个例子,但你说的“even this”,i未被定义,是什么意思? - aWebDeveloper
首先解析 (i in range(1,10)) 并返回一个布尔值... 如果它不是有效的语法,那么它会如何被解析? - Suresh Kota

1
  • if 语句需要一个值(TrueFalse)。你可以在任何值周围加上括号:(1) + (1)

  • for VAR in LIST 是一个固定的语法,它不期望单个值,而是期望两个输入:

    • 变量名
    • 你要迭代的内容

    那么为什么 Python 语言允许在那里加上额外的括号呢?

正如某人在现已删除的答案中指出的那样(为什么?),这是 for 语句的语法:http://docs.python.org/3/reference/compound_stmts.html#the-for-statement

for_stmt ::=  "for" target_list "in" expression_list ":" suite
              ["else" ":" suite]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接