流程控制是程序的骨架——它决定了代码什么条件下执行、重复多少次、何时提前跳出。Python 在这方面的设计依然贯彻“简洁明了”的风格,关键词少、结构干净。
if 分支:条件判断
基本语法
if 条件1:
代码块1
elif 条件2:
代码块2
else:
代码块3
elif可以有多个,也可以没有;else可选。- 条件可以是任何能转成布尔值的表达式:比较运算、逻辑组合、成员判断等。
实用要点
- 不要写无意义的
== True:if x == True:不如直接写if x:,除非确实需要严格区分True和1。 - 利用
in和not in:if name in ['admin', 'root']:比多个or拼接更清晰。 - 简洁的条件嵌套:可以用
and/or连接,但注意括号保证优先级和可读性。
真实示例
score = 85
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
else:
grade = 'D'
for 循环:遍历可迭代对象
基本语法
for 变量 in 可迭代对象:
代码块
- 最常见的可迭代对象:字符串、列表、元组、字典、集合、
range()生成的序列、文件对象等。 - 不需要手动维护索引,直接拿到元素。
常见场景与写法
- 迭代列表:
for item in items: - 需要索引时用
enumerate:for idx, item in enumerate(items): - 同时迭代多个序列用
zip:for a, b in zip(list_a, list_b): - 遍历字典:
for key, value in d.items(): - 遍历整数范围:
for i in range(10):生成 0~9。
注意:不要在遍历一个列表的过程中直接增删其元素,这会导致跳过元素或下标越界。安全的做法是遍历副本(for item in list[:]:),或者用列表推导式生成新的列表。
while 循环:条件重复
基本语法
while 条件:
代码块
- 每次循环前检查条件是否为
True,是则执行,否则退出。 - 常用于不确定执行次数、由某个状态驱动的场景。
实用要点
- 避免死循环:务必在循环体内有改变条件的语句,或明确使用
break跳出。 - 计数器迭代不如
for i in range安全,while更适合“等待某条件成立”的循环(如监听、轮询)。
真实示例
# 读取用户输入直到输入 "quit"
command = ""
while command != "quit":
command = input("Enter command: ")
break 和 continue:循环控制
break:立即终止包含它的最内层循环,程序继续执行循环后面的语句。continue:跳过当前循环剩余代码,直接开始下一次迭代。
典型用法
# break:找到目标就停止查找
for num in [3, 7, 2, 9, 5]:
if num == 2:
print("找到了")
break
else:
print("未找到") # 与 for/else 搭配使用
# continue:跳过偶数,只处理奇数
for num in range(10):
if num % 2 == 0:
continue
print(num)
注意:break 和 continue 只作用于当前层循环,嵌套循环中想跳出外层需要额外的标志变量或函数封装。
循环的 else 子句:不常知但实用
Python 的 for 和 while 循环可以带一个 else 块。它的执行规则是:当循环正常结束(没有被 break 打断)时,执行 else 块。
为什么这么设计
常用于“查找-未找到”的模式,避免了通过额外标志变量判断循环是否提前结束。
示例:检查列表中是否有偶数
numbers = [1, 3, 5, 7]
for n in numbers:
if n % 2 == 0:
print("存在偶数")
break
else:
print("列表中没有偶数")
- 如果循环被
break打断,else不会执行;如果每次迭代都没遇到偶数而正常结束(或空序列),则触发else。 while循环同理。
最佳实践:只有在这种“搜索/验证”场景才使用循环 else,滥用会让代码阅读者感到困惑。
这些控制结构构成了日常编码的绝大部分逻辑。掌握它们之后,就可以轻松实现数据筛选、循环处理、交互式脚本等常见任务。