前言
学完变量和基础类型以后,就要开始写控制流程。
条件判断、循环、break、continue、推导式,这些东西在任何语言里都很基础。Python 的写法比较简洁,但也有自己的习惯。
这篇记录我学习 Python 流程控制时觉得比较重要的点。重点不是语法背诵,而是写出清楚、可读的代码。
if 判断
Python 的 if 不需要括号,也没有大括号,靠缩进表示代码块。
age = 18
if age >= 18:
print("adult")
else:
print("child")
缩进在 Python 里不是风格问题,而是语法。少一个缩进、多一个缩进,程序含义就变了。
多个条件用elif:
score = 86
if score >= 90:
level = "A"
elif score >= 80:
level = "B"
else:
level = "C"
这种写法很直观。
真值判断
Python 里很多对象可以直接放到 if 里判断。
names = []
if names:
print("not empty")
else:
print("empty")
空列表、空字符串、空字典、0、None 都会被当成 False。
这很方便,但也要小心。比如数字 0 和 None 语义不同,如果你要判断“有没有传值”,最好明确写:
if value is None:
print("missing")
不要把所有情况都混成 truthy/falsy。
for 循环
Python 的 for 更像“遍历可迭代对象”。
names = ["Tom", "Jerry", "Alice"]
for name in names:
print(name)
如果要下标,可以用 enumerate:
for index, name in enumerate(names):
print(index, name)
这比自己写range(len(names))更清楚。
for i in range(len(names)):
print(i, names[i])
这段不是不能写,但 Python 里通常更推荐 enumerate。
range
range 用来生成整数序列。
for i in range(5):
print(i)
输出 0 到 4。
也可以指定起点和步长:
for i in range(1, 10, 2):
print(i)
输出 1、3、5、7、9。
刚开始要注意,range 的结束值不包含在内。这和很多语言里的区间习惯类似,但初学时很容易差一位。
while 循环
while 在条件为 True 时持续执行。
count = 0
while count < 3:
print(count)
count += 1
while 适合不知道循环次数,只知道结束条件的场景。
但要小心死循环。如果循环里没有改变条件,就会一直跑。
while True:
command = input(">")
if command == "exit":
break
这种写法适合简单命令行程序。
break 和 continue
break 用来结束循环。
for name in names:
if name == "Alice":
break
continue 用来跳过本次循环,进入下一次。
for name in names:
if not name:
continue
print(name)
这两个关键字很常用,但不要滥用。循环里太多 break 和 continue,会让代码路径变复杂。
推导式
Python 的列表推导式很有特色。
普通写法:
numbers = [1, 2, 3, 4]
result = []
for number in numbers:
result.append(number * 2)
推导式写法:
result = [number * 2 for number in numbers]
还可以加条件:
even_numbers = [number for number in numbers if number % 2 == 0]
推导式适合简单转换和过滤。不要把复杂逻辑硬塞进去。如果一行推导式看半天看不懂,就不如老老实实写 for 循环。
字典推导式
字典也有推导式。
names = ["Tom", "Alice"]
name_lengths = {name: len(name) for name in names}
结果是:
{"Tom": 3, "Alice": 5}
这种写法很适合从列表生成映射关系。
比如根据用户列表生成 ID 到用户的字典:
user_map = {user["id"]: user for user in users}
这在处理接口数据时很常见。
match 可以了解
Python 3.10 以后有 match 语句,可以做结构化模式匹配。
match status:
case "WAITING":
print("等待中")
case "DONE":
print("已完成")
case _:
print("未知状态")
初学阶段不一定马上大量使用,但可以知道它存在。简单条件用 if 就够了,复杂结构匹配时再考虑 match。
小结
Python 的流程控制语法很简洁,但简洁不等于随便写。
if 要注意真值判断,for 遍历时优先用 enumerate,while 要小心死循环,推导式适合简单表达,不适合堆复杂逻辑。
写流程控制时,我觉得最重要的是可读性。Python 代码本来就短,不要为了再少两行,把逻辑写得让人猜。
気に入ったならばコメントを残してくださいね~