1. 循环基础:从菜市场买菜说起
刚学Python那会儿,我对循环的理解就像第一次去菜市场——明明只想买三样菜,结果转来转去不是漏了葱就是多买了蒜。直到把for和while用顺手了,才明白循环不过是让计算机帮我们做重复工作的工具。先看这个典型场景:
python复制# 糟糕的写法:手动重复
print("买白菜")
print("买萝卜")
print("买豆腐")
# 优雅的循环
shopping_list = ["白菜", "萝卜", "豆腐"]
for item in shopping_list:
print(f"买{item}")
for循环特别适合处理这种已知次数的重复操作。它的底层逻辑其实是迭代器协议,Python会把列表、字符串等可迭代对象自动转换成迭代器。我常跟新手说,想象for循环就像自动售货机的传送带——每次推进一个商品,直到货架清空。
关键理解:for循环本质是
__iter__()和__next__()方法的语法糖,这也是为什么它能处理任何实现了迭代器协议的对象
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. while循环:你不知道的"隐形坑"
while循环看似简单,却藏着新手最容易踩的三大坑:
2.1 死循环预防手册
去年帮学弟调试代码时遇到个经典案例:
python复制# 危险示范
count = 0
while count < 5:
print("正在处理...")
# 忘记写 count += 1
这种bug在真实项目中可能造成服务器崩溃。我的防坑三件套:
- 在while开头写清终止条件注释
- 使用哨兵变量(如
max_retries = 3) - 添加超时机制(后面会演示)
2.2 布尔陷阱
新手常犯的布尔判断错误:
python复制# 错误写法
is_running = True
while is_running == True: # 冗余比较
...
# 正确姿势
while is_running: # 直接使用布尔值
...
2.3 输入验证模板
处理用户输入时while特别有用:
python复制valid_input = False
while not valid_input:
user_input = input("请输入1-100的数字:")
if user_input.isdigit() and 1 <= int(user_input) <= 100:
valid_input = True
else:
print("输入无效!")
3. 循环控制:break和continue的实战艺术
3.1 break的智能退出
在爬虫项目中,我常用break实现优雅退出:
python复制for page in range(1, 100):
data = crawl_page(page)
if not data: # 遇到空页就停止
print(f"在第{page}页终止采集")
break
process_data(data)
经验法则:break应该用于"预期外"的中断,正常结束应该用循环条件控制
3.2 continue的过滤妙用
处理脏数据时的典型模式:
python复制valid_users = []
for user in raw_users:
if not user.get('email'):
continue # 跳过无效用户
if user['age'] < 18:
continue # 过滤未成年
valid_users.append(user)
这种写法比嵌套if更清晰,就像流水线上的质检员,不合格的直接踢出生产线。
4. 循环进阶:你可能不知道的高效技巧
4.1 带else的循环
多数人不知道循环可以带else:
python复制for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print(f"{n} = {x}*{n//x}")
break
else: # 循环正常结束才会执行
print(f"{n}是质数")
这个else其实应该叫
