continue是实现卫语句最直接轻量的手段,用于for循环中快速排除不满足前置条件的迭代项,降低主逻辑缩进层级,提升代码清晰度与可维护性。
continue 是实现“卫语句”(guard clauses)最直接、轻量的手段之一,尤其在大型 for 循环中——它能快速排除不满足前置条件的迭代项,把主逻辑缩进层级压到最低,让代码更清晰、更易维护。
卫语句的本质是“早退”,不是“早进”
卫语句的核心思想:在函数或循环体开头,用简洁条件判断拦截非法、无效或无需处理的情况,立即跳过后续逻辑。这比用 if ... else 套嵌主逻辑更直观。
在 for 循环中,continue 就是那个“立即跳过本次迭代”的执行点:
- 它不终止整个循环,只放弃当前元素的处理流程
- 避免了深层缩进(比如
if (valid) { if (hasPermission) { if (notExpired) { ... } } }) - 条件判断顺序应按“失败概率从高到低”或“校验成本从低到高”排列,提升平均性能
典型适用场景与写法示例
假设你正在遍历一个含上千条用户记录的列表,需过滤并处理满足多重条件的用户:
-
❌ 避免嵌套:
if user.active:<br> if user.age >= 18:<br> if user.country == 'CN':<br> process(user)
-
✅ 推荐卫语句 + continue:
for user in users:<br> if not user.active: continue<br> if user.age if user.country != 'CN': continue<br> process(user)
配合布尔表达式和提前计算,进一步提效
大型循环中,重复调用开销大的函数(如数据库查询、正则匹配、JSON 解析)会拖慢速度。可将守卫条件中的计算提到前面,复用结果:
- 把耗时校验(如
is_valid_email(user.email))结果存为局部变量,再用于多个continue判断 - 合并简单条件,减少判断次数:
if not user or not user.email: continue - 对批量数据,可先用生成器或
filter()预筛一次,再进主循环,让continue处理的是更精简的数据集
注意边界:别让 continue 变成“隐藏控制流”
过度使用或条件写得模糊,会让逻辑跳跃难追踪。建议遵守三条实践纪律:
- 每个
continue前加单行注释,说明跳过的理由(如# 跳过测试账号) - 避免在循环体内多次
continue处理同一类问题,应抽象成独立验证函数(如if not should_process(user): continue) - 调试时可在关键
continue处加日志或断点,确认跳过行为符合预期










