找回密码
 立即注册
搜索
到手67.99元!阿里云轻量2核2G云服务器
查看: 20|回复: 0

循环的 else 子句

[复制链接]

696

主题

0

回帖

11

积分

管理员

积分
11
发表于 2026-4-15 16:06:05 | 显示全部楼层 |阅读模式
在 for 或 while 循环中 break 语句可能对应一个 else 子句。 如果循环在未执行 break 的情况下结束,else 子句将会执行。

在 for 循环中,else 子句会在循环结束其最后一次迭代之后,即未执行 break 的情况下被执行。

在 while 循环中,它会在循环条件变为假值后执行。

在这两类循环中,当在循环被 break 终结时 else 子句 不会 被执行。 当然,其他提前结束循环的方式,如 return 或是引发异常,也会跳过 else 子句的执行。

下面的搜索质数的 for 循环就是一个例子:

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n//x)
            break
    else:
        # 循环到底未找到一个因数
        print(n, 'is a prime number')

2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
(对,这是正确的代码。 仔细看:其中 else 子句属于 for 循环,而 不属于 if 语句。)

分析 else 子句的一种方式是想象它对应于循环内的 if。 当循环执行时,它将运行一系列的 if/if/if/else。 if 位于循环内部,会出现多次。 当出现条件为真的情况时,将发生 break。 如果条件一直不为真,则循环外的 else 子句将被执行。

当配合循环使用时,else 子句更像是 try 语句的 else 子句而不像 if 语句的相应子句:一个 try 语句的 else 子句会在未发生异常时运行,而一个循环的 else 子句会在未发生 break 时运行。 有关 try 语句和异常的详情,请参阅 异常的处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|skypiea

GMT+8, 2026-6-27 05:17 , Processed in 0.040609 second(s), 20 queries .

Powered by skypiea

快速回复 返回顶部 返回列表