为什么在遍历列表时不能在for循环周围使用括号?

时间:2020-01-08 22:09:54

标签: python for-loop

a =["mary","had", "a", "little", "lamb"]   
print(len(a))   
for (i in a):  **# this part says invalid syntax**   
    print(i)   


a =["mary","had", "a", "little", "lamb"]   
print(len(a))   
for i in a:   #this works just fine   
    print(i)

2 个答案:

答案 0 :(得分:4)

对于Python grammarfor循环的语法为:

for_stmt: 'for' exprlist 'in' testlist ':' [TYPE_COMMENT] suite ['else' ':' suite]

它是for关键字,表达式列表,in关键字和测试列表。 exprlist 'in' testlist没有用括号括起来的规定。

要允许使用括号,则必须改为如下所示,其中 expr 是可能用括号括起来的表达式:

for_stmt: 'for' expr ':' [TYPE_COMMENT] suite ['else' ':' suite]

那不是语法。

但是解释器不应该忽略括号吗?像(a+b)/2((a)+(b))/2一样吗?

仅在预定义的位置才允许使用括号。他们不允许在任何地方。您不能写(a+)b/2a+b(/2),对吧?

在语法中,圆括号来自此生成:

atom: ('(' [yield_expr|testlist_comp] ')' |
       '[' [testlist_comp] ']' |
       '{' [dictorsetmaker] '}' |
       NAME | NUMBER | STRING+ | '...' | 'None' | 'True' | 'False')

expr 可以有很多东西。 expr 最基本,不可分割的类型是 atom :名称,数字,字符串等(最后一行)。或另一个用括号括起来的表达式(第一行)。

在任何允许使用表达式的地方,都可以使用该表达式的括号。

'for' exprlist 'in' testlist ':'

exprlist 可以用括号括起来。 testlist 可以用括号括起来。如果您检查语法,那么这两个产生式最终都会导致 atom 产生。允许使用这些括号:

for (i) in (a):

但是您不能在其他任何地方随意插入括号。这些都不被允许:

for (i in a):
for i (in a):
(for) i in a:
(for i in) a:

答案 1 :(得分:-2)

孤立的表达式i in a的计算结果为布尔值:i在序列a中吗?

将其放在方括号中时,您告诉解释器在查看其周围的事物之前先确定其值,因此就像编写:

for False:

除了因为未定义i而使情况更糟之外。