Python其他语句内部和外部while循环

Python else statement inside and outside while loop

本问题已经有最佳答案,请猛点这里访问。

鉴于以下Python程序,

1
2
3
4
5
6
7
8
9
10
#Version 1
x = 15
y = 8
while x - y > 0:
    x -= 2
    y += 1
    print x, y
    if x % y == 0: break
else:
        print x, y

输出如下:

1
2
3
4
13 9
11 10
9 11
9 11

前三个行在while循环中打印,最后一行(9 11)作为else子句的一部分再次打印。
现在,另一个变种:

1
2
3
4
5
6
7
8
9
10
#version 2
x = 15
y = 8
while x - y > 0:
    x -= 2
    y += 1
    print x, y
    if x % y == 0: break
    else:
        print x, y

而且,现在的输出是:

1
2
3
4
5
6
13 9
13 9
11 10
11 10
9 11
9 11

看,每个x,y对打印两次,一个是上面的print语句,一个是因为else子句。
这是否意味着第一个版本允许其他:在循环时走出去? 这不奇怪吗?
背后的原因是什么?


while循环在Python中可以有else s。 来自while声明:

1
2
while_stmt ::= "while" expression":" suite
                ["else"":" suite]

This [the while statement] repeatedly tests the expression and, if it is true, executes the first suite; if the expression is false (which may be the first time it is tested) the suite of the else clause, if present, is executed and the loop terminates.