Python3在grammar book中将for循环定义为for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]
。 suite
被定义为suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
。
对我来说,很难理解double for循环如何适合列表理解的语法描述。
有几个较小的问题:
else
又如何呢?我认为它是用于列表理解的。else
块吗?如果您能提供示例,我将不胜感激。
答案 0 :(得分:3)
从其他语法规则中可以看出:
suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT
suite
是一个简单的语句(一行),例如:
for foo in bar: some_statement()
或者它是一个换行符,后跟一个缩进的块(由语句组成)。
'else'
只是字符串“ else”。
我通常将for循环的else
读为“不间断”:它在for循环结束后执行,但前提是break
没有退出它。它存在的原因是与while
一致,后者具有else
语句,因为它基本上只是重复的if
。
答案 1 :(得分:1)
如果循环正常结束(如果未用else
关键字中断),则执行for之后的break
https://docs.python.org/2/tutorial/controlflow.html
suite
只是一个缩进级别或单个语句
答案 2 :(得分:1)
根据the documentation,如果循环结束而没有中断,则执行else
循环的for
子句。
请参见以下两个示例:
for elem in range(5):
print(elem)
else:
print('ended')
这里,suite
部分对应于print(elem)
,输出将是:
0
1
2
3
4
ended
第二:
for elem in range(5):
if elem < 3:
print(elem)
else:
break
else:
print('ended')
这里,suite
部分对应于if elem < 3: print(elem) else: break
,
输出将是:
0
1
2