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)
答案 0 :(得分:4)
对于Python grammar,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/2
或a+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
而使情况更糟之外。