循环语句可能带有 else 子句;它会在循环耗尽了可迭代对象 (使用 for) 或循环条件变为假值 (使用 while) 时被执行,但不会在循环被 break 语句终止时被执行。 以下搜索素数的循环就是这样的一个例子:
>>> for n in range(2, 10):
... for x in range(2, n):
... if n % x == 0:
... print(n, 'equals', x, '*', n//x)
... break
... else:
... # loop fell through without finding a factor
... print(n, 'is a prime number')
...else: # 添加一个else来确认else与哪个for搭配
... print('finish') # 若于缩进层次的最近for搭配,则只会打印一次finish
...
2 is a prime number # 输出1
3 is a prime number # 输出2
4 equals 2 * 2 # 输出3
5 is a prime number # 输出4
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
finish
以上例子来源于官方文档(做了个小修改)
个人理解:
输出1:因为 range(2,2) 是空的,所以内循环直接耗尽可迭代对象,没有触发 if 语句中的 break,所以跳到了 else 语句
输出3:此时 n = 4,当 x = 2 时触发 if 语句,执行 break 语句,不执行 else 语句
else 语句 在缩进上与所搭配的 for 语句同级