本文目录导读:

在 Python 中,for...else 和 while...else 是一个非常有特色但容易被忽视的特性。else 块在循环正常结束(没有被 break 中断)时执行。
核心规则
- 循环正常结束 → 执行 else 块
- 循环被
break中断 → 不执行 else 块
实用案例
查找元素(最常见用法)
# 查找列表中是否存在特定元素
numbers = [1, 3, 5, 7, 9, 11]
target = 6
for num in numbers:
if num == target:
print(f"找到目标值: {target}")
break
else:
print(f"列表中不存在目标值: {target}")
# 输出: 列表中不存在目标值: 6
# target = 7,则会输出: 找到目标值: 7(不会执行 else)
质数判断
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
print(f"{n} 能被 {i} 整除")
break
else:
print(f"{n} 是质数")
return True
return False
# 测试
is_prime(17) # 输出: 17 是质数
is_prime(15) # 输出: 15 能被 3 整除
验证密码强度
def check_password(password):
# 检查密码是否包含至少一个数字
has_digit = False
for char in password:
if char.isdigit():
has_digit = True
break
else:
print("密码必须包含至少一个数字")
return False
# 检查密码是否包含至少一个字母
for char in password:
if char.isalpha():
has_letter = True
break
else:
print("密码必须包含至少一个字母")
return False
return True
# 测试
check_password("abc123") # 返回 True
check_password("123456") # 输出: 密码必须包含至少一个字母
check_password("abcdef") # 输出: 密码必须包含至少一个数字
循环嵌套中的使用
# 在二维列表中查找目标值
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
target = 5
for row_idx, row in enumerate(matrix):
for col_idx, value in enumerate(row):
if value == target:
print(f"找到 {target} 在位置: ({row_idx}, {col_idx})")
break
else:
continue # 内层循环正常结束(没找到),继续外层循环
break # 内层循环被 break,执行到这里,退出外层循环
else:
print(f"矩阵中不存在 {target}")
数据库连接重试机制
import time
def connect_to_db(max_retries=3):
for attempt in range(1, max_retries + 1):
print(f"第 {attempt} 次尝试连接数据库...")
success = attempt == 3 # 模拟前两次失败,第三次成功
if success:
print("数据库连接成功!")
break
else:
print(f"连接失败,等待重试...")
time.sleep(1)
else:
print("多次尝试连接均失败,请检查网络配置")
return False
return True
# 测试
connect_to_db()
# 输出:
# 第 1 次尝试连接数据库...
# 连接失败,等待重试...
# 第 2 次尝试连接数据库...
# 连接失败,等待重试...
# 第 3 次尝试连接数据库...
# 数据库连接成功!
注意事项
- 不要在 else 块中使用 continue:
continue不会影响 else 的执行
for i in range(5):
if i == 3:
continue # 跳过,不影响 else 执行
else:
print("循环正常结束") # 这会执行
- else 块可以包含任何语句:
return、raise等都可以
def find_value(lst, target):
for item in lst:
if item == target:
return True
else:
raise ValueError(f"{target} 不在列表中")
最佳实践
- 适用于搜索或验证场景:如果找到就
break,否则执行默认操作 - 比使用标记变量更简洁:不需要维护
found = False这样的变量 - 代码意图更清晰:
else明确表示"循环正常结束"的含义
这种模式在处理"查找某个元素并执行相应操作"的场景时特别有用,能让代码更加 Pythonic。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播