Python流程控制
本篇介绍 Python 的条件判断、循环和推导式,并包含 Python 3.10 引入的结构化模式匹配(match/case)。
if 语句
age = 19
is_member = True
if age >= 18 and is_member:
print("欢迎,成年会员!")
elif age >= 18:
print("欢迎,普通访客!")
elif age >= 13:
print("未成年用户,部分功能受限")
else:
print("不符合年龄要求")- 缩进必须一致,官方推荐 4 个空格。
if判断由上到下,一旦某分支匹配成功,其余分支不再执行。- 嵌套深度建议不超过 3 层,过深应重构为函数。
三元表达式
x, y = 3, 5
smaller = x if x < y else y # 3
# 嵌套三元(可读性差,慎用)
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")match/case(结构化模式匹配,Python 3.10+)
match/case 是比 if/elif 更强大的模式匹配语法,支持值匹配、解构、类型匹配等:
# 基本值匹配
status = 404
match status:
case 200:
print("OK")
case 404:
print("Not Found")
case 500:
print("Internal Server Error")
case _:
print(f"未知状态码: {status}")# 序列解构匹配
command = ("move", 10, 20)
match command:
case ("quit",):
print("退出")
case ("move", x, y):
print(f"移动到 ({x}, {y})")
case ("say", message):
print(f"说: {message}")
case _:
print("未知命令")# 类匹配(配合 __match_args__)
from dataclasses import dataclass
@dataclass
class Point:
x: float
y: float
def describe(point: Point) -> str:
match point:
case Point(x=0, y=0):
return "原点"
case Point(x=0, y=y):
return f"Y 轴上,y={y}"
case Point(x=x, y=0):
return f"X 轴上,x={x}"
case Point(x=x, y=y):
return f"点 ({x}, {y})"
# 带守卫条件(guard)
match point:
case Point(x, y) if x == y:
print(f"在对角线上,坐标 {x}")
case Point(x, y):
print(f"不在对角线上")while 循环
count = 0
while count < 5:
print(count)
count += 1
# while-else:循环正常结束(未被 break 中断)时执行 else
attempts = 0
while attempts < 3:
password = input("输入密码:")
if password == "secret":
print("登录成功")
break
attempts += 1
else:
print("密码错误次数过多,账户锁定")海象运算符简化 while(Python 3.8+)
# 传统写法
line = input()
while line:
process(line)
line = input()
# 海象运算符写法
while line := input("> "):
process(line)for 循环
# 遍历列表
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
# 带索引:enumerate
for i, fruit in enumerate(fruits, start=1):
print(f"{i}. {fruit}")
# 同时遍历多个序列:zip
names = ["Alice", "Bob", "Charlie"]
scores = [90, 85, 92]
for name, score in zip(names, scores):
print(f"{name}: {score}")
# range
for i in range(10): # 0-9
print(i)
for i in range(1, 10, 2): # 1, 3, 5, 7, 9
print(i)
# for-else:循环正常结束时执行 else
for i in range(5):
if i == 3:
break
else:
print("循环正常结束") # 有 break 时不执行break / continue
# break:立即终止整个循环
for i in range(10):
if i == 5:
break
print(i) # 0 1 2 3 4
# continue:跳过当次循环,继续下一次
for i in range(10):
if i % 2 == 0:
continue
print(i) # 1 3 5 7 9推导式
推导式是 Python 中简洁创建集合的语法糖,常见有四种:
列表推导式
# [表达式 for 变量 in 可迭代对象 if 条件]
squares = [x ** 2 for x in range(10)]
# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
evens = [x for x in range(20) if x % 2 == 0]
# [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# 嵌套(展平二维矩阵)
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [x for row in matrix for x in row]
# [1, 2, 3, 4, 5, 6, 7, 8, 9]字典推导式
# {key表达式: value表达式 for 变量 in 可迭代对象}
squares = {x: x ** 2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 翻转字典的键值
d = {"a": 1, "b": 2}
reversed_d = {v: k for k, v in d.items()}
# {1: "a", 2: "b"}集合推导式
# {表达式 for 变量 in 可迭代对象 if 条件}
unique_chars = {c.lower() for c in "Hello World" if c != " "}
# {'h', 'e', 'l', 'o', 'w', 'r', 'd'}生成器表达式
# 圆括号:不立即创建整个序列,按需生成(节省内存)
gen = (x ** 2 for x in range(1_000_000))
print(next(gen)) # 0
print(next(gen)) # 1
# 常用于传参给接受可迭代对象的函数
total = sum(x ** 2 for x in range(100))推导式虽然简洁,但可读性是首要原则。超过两层嵌套、逻辑复杂时,请改用普通
for 循环。最后更新于