Python中用于语法规则的“ suite”和“ else”是什么?

时间:2018-11-14 10:32:06

标签: python

Python3在grammar book中将for循环定义为for_stmt: 'for' exprlist 'in' testlist ':' suite ['else' ':' suite]suite被定义为suite: simple_stmt | NEWLINE INDENT stmt+ DEDENT

对我来说,很难理解double for循环如何适合列表理解的语法描述。

有几个较小的问题:

  • else又如何呢?我认为它是用于列表理解的。
  • 那么普通的for循环可以使用else块吗?

如果您能提供示例,我将不胜感激。

3 个答案:

答案 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