首页 > 解决方案 > 为什么在遍历列表时不能在 for 循环周围使用括号?

问题描述

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)

标签: pythonfor-loop

解决方案


根据Python 语法for循环的语法是:

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/2or a+b(/2),对吧?

在语法中,括号来自这个产生式:

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

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

在任何允许使用表达式的地方,也允许使用该表达式的括号版本。

'for' exprlist 'in' testlist ':'

exprlist可以用括号括起来。测试列表可以用括号括起来。如果你检查语法,这两个产生最终都会导致原子产生。允许使用这些括号:

for (i) in (a):

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

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

推荐阅读