循环控制:break、continue、pass
循环控制语句改变循环的正常执行流程。break 立即终止整个循环,continue 跳过当前迭代剩余部分,pass 什么都不做——它们各自解决不同的问题。
break:立即终止循环
break 跳出最内层的循环,继续执行循环之后的代码:
for i in range(10):
if i == 5:
break
print i
# 输出:0, 1, 2, 3, 4
break 常用于"找到就停"的搜索场景:
items = [3, 1, 4, 1, 5, 9, 2, 6]
target = 5
for item in items:
if item == target:
print "Found at index", items.index(item)
break
else:
print "Not found" # 如果 break 触发,else 不执行
在嵌套循环中,break 只跳出最内层:
for i in range(3):
for j in range(3):
if j == 1:
break # 只跳出内层 j 循环
print i, j
print "---"
# 输出:
# 0 0
# ---
# 1 0
# ---
# 2 0
# ---
如果需要跳出多层循环,可以用标志变量:
found = False
for i in range(10):
for j in range(10):
if i * j == 15:
print "Found:", i, j
found = True
break
if found:
break
continue:跳过当前迭代
continue 立即结束当前迭代,跳到循环条件检查(while)或下一个元素(for):
for i in range(10):
if i % 2 == 0:
continue # 跳过偶数
print i
# 输出:1, 3, 5, 7, 9
continue 常用于过滤不需要处理的元素:
data = [10, -5, 3, -2, 8, 0]
total = 0
for value in data:
if value <= 0:
continue # 跳过非正数
total += value
print total # 21(10 + 3 + 8)
注意 continue 的位置:它后面的代码不会执行,但循环变量更新(while 中)仍然需要在 continue 之前完成:
# 错误:continue 跳过了 i += 1,导致无限循环
i = 0
while i < 5:
if i == 2:
continue # 死循环!i 永远是 2
print i
i += 1
# 正确:更新放在 continue 之前
i = 0
while i < 5:
i += 1
if i == 2:
continue
print i
pass:空操作占位符
pass 什么都不做。它存在的意义是占据语法上必须有语句的位置:
# 先定义函数框架,稍后实现
def process_data(data):
pass # 暂时空实现,避免 SyntaxError
# 空类(用作数据容器)
class Point:
pass
p = Point()
p.x = 10
p.y = 20
print p.x, p.y # 10 20
pass 也常用于 if 的占位:
if user.is_admin:
pass # 管理员逻辑待实现
else:
print "Access denied"
三者对比
| 语句 | 作用 | 使用场景 |
|---|---|---|
break | 终止整个循环 | 找到目标、发生致命错误 |
continue | 跳过当前迭代 | 过滤不符合条件的元素 |
pass | 什么都不做 | 占位、空实现 |
与 else 子句的配合
break 和 for-else/while-else 的配合是 Python 的特色:
# 检查列表是否全为正数
nums = [1, 3, 5, 7]
for n in nums:
if n <= 0:
print "Not all positive"
break
else:
print "All positive" # 没有 break 时执行
else 子句在循环正常结束(没有被 break 打断)时执行。这个设计让"搜索并判断是否存在"的逻辑变得清晰。