break 与 continue
在循环执行过程中,有时需要根据中途出现的条件改变流程:break 用于立即终止整个循环,continue 用于跳过当前轮次的剩余代码,直接进入下一轮迭代。两者都只影响最近的一层循环。
break 语句
break 跳出当前所在的 for 或 while 循环,程序继续执行循环之后的代码:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} = {x} * {n//x}")
break
上面的代码来自 Python 官方教程,用于寻找 2 到 9 之间的合数。内层循环遍历可能的因数,一旦发现 n 能被 x 整除,立即用 break 终止内层循环,避免不必要的后续检查。输出:
4 = 2 * 2
6 = 2 * 3
8 = 2 * 4
9 = 3 * 3
注意 break 只跳出内层的 for x in range(2, n) 循环,外层循环继续处理下一个 n。
break 在 while 循环中同样有效:
while True:
command = input("请输入命令(quit 退出):")
if command == "quit":
break
print(f"执行:{command}")
print("程序结束")
continue 语句
continue 结束当前轮次,立即跳转到循环的条件判断(while)或下一次迭代(for):
for num in range(2, 10):
if num % 2 == 0:
print(f"发现偶数 {num}")
continue
print(f"发现奇数 {num}")
当 num 为偶数时,continue 跳过其后的 print(f"发现奇数..."),直接进入下一轮。输出:
发现偶数 2
发现奇数 3
发现偶数 4
发现奇数 5
发现偶数 6
发现奇数 7
发现偶数 8
发现奇数 9
在 while 循环中使用 continue 时,务必确保循环变量在 continue 之前已更新,否则可能引发死循环:
i = 0
while i < 5:
if i == 2:
i += 1 # 必须在 continue 前更新
continue
print(i)
i += 1
如果忘记在 if i == 2 分支里写 i += 1,continue 会跳过末尾的更新,导致 i 永远为 2,陷入死循环。
嵌套循环中的行为
break 和 continue 只作用于最近的一层循环,不会跨层影响:
for i in range(3):
for j in range(3):
if j == 1:
break # 只跳出内层 j 循环
print(f"i={i}, j={j}")
输出:
i=0, j=0
i=1, j=0
i=2, j=0
每次 j 达到 1 时,内层循环终止,但外层 i 循环继续。如果需要从多层循环中一次性跳出,可以使用标志变量或封装为函数并用 return:
def find_pair():
for i in range(10):
for j in range(10):
if i * j == 15:
print(f"找到:{i} * {j} = 15")
return # 直接退出整个函数
find_pair()
Python 没有 break 2 或标签跳转语法,return 和异常是跳出多层循环的常用手段。
break 与 else 子句的关系
循环的 else 子句与 break 密切相关:如果循环被 break 终止,else 不会执行;只有循环自然结束时,else 才运行。详见《循环的 else 子句》文档。
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
break
else:
print(f"{n} 是质数")
这里的 else 属于内层 for 循环。当内层循环没有被 break 中断(即未找到因数)时,else 执行,报告质数。
使用场景对比
| 场景 | 使用 break | 使用 continue |
|---|---|---|
| 找到目标后无需继续 | ✅ | ❌ |
| 跳过不符合条件的元素 | ❌ | ✅ |
| 提前结束无限等待 | ✅ | ❌ |
| 过滤并处理剩余元素 | ❌ | ✅ |
break 的典型场景:搜索、查找、验证——一旦满足条件,任务完成,无需继续。
target = 7
found = False
for i in range(100):
if i == target:
found = True
break
print("找到" if found else "未找到")
continue 的典型场景:批量处理中的过滤——某些元素不符合要求,跳过即可,其余继续处理。
scores = [85, -1, 92, 0, 78]
for s in scores:
if s < 0:
continue # 跳过无效分数
print(f"有效成绩:{s}")
常见错误
在循环外使用 break 或 continue:
if x > 0:
break # SyntaxError: 'break' outside loop
break 和 continue 只能出现在 for 或 while 循环体内。
混淆 break 与 continue 的效果:
# 本想跳过偶数,却错误地终止了循环
for i in range(10):
if i % 2 == 0:
break # 错误:循环在 i=0 时就结束了
print(i)
正确做法应使用 continue。
break 和 continue 是精细控制循环流程的两个关键字,掌握它们的作用范围和与 else 子句的交互,能够编写出既高效又清晰的迭代逻辑。