26
推导式
推导式(Comprehensions):把常见循环写得更简洁
你现在可能会困惑什么
“推导式是不是必须会,不会就不 Pythonic?”
不是。推导式是可读性工具,不是炫技工具。 先保证你能读懂和维护。
一句话定义
推导式是“循环 + 条件 + 生成新集合”的简洁写法。
生活类比
普通循环像手工装配; 推导式像流水线模板,规则固定时效率更高。
最小可运行例子
squares = [x * x for x in range(1, 6)]
print(squares)
三种高频推导式
# list
list_even = [x for x in range(1, 11) if x % 2 == 0]
# dict
scores = {"Amy": 88, "Bob": 95, "Cara": 76}
passed = {name: s for name, s in scores.items() if s >= 80}
# set
vals = [1, 1, 2, 3, 3]
unique_sq = {x * x for x in vals}
何时不用推导式
- 逻辑超过一层且难读
- 需要复杂异常处理
- 需要多段中间状态调试
课堂小测(5 分钟)
- 生成 1~100 中能被 3 整除的列表。
- 把
['alice', 'bob']转成{name: len(name)}。 - 用 set 推导式完成去重后平方。
课堂小测参考答案与判分点
- 参考答案方向:能写出可运行代码,并覆盖题目中的核心条件与边界输入。
- 判分点 1(正确性):主流程结果正确,关键分支可执行。
- 判分点 2(可读性):变量命名清晰,结构不过度嵌套。
- 判分点 3(健壮性):对空值、类型错误或异常输入有基础保护。
迁移任务(课后)
把一个“普通循环清洗用户列表”的代码改成推导式版本,并比较可读性。
本节验收标准
你能独立做到:
- 写出 list/dict/set 推导式
- 判断何时用推导式、何时用普通循环
- 保持代码简洁且可读
常见报错与调试步骤(新手版)
- 报错看不懂:先读最后一行错误类型(如
TypeError、NameError),再回到对应代码行定位。 - 不确定变量值:在关键位置临时
print(变量, type(变量)),先确认数据是否符合预期。 - 改了代码却没生效:确认文件已保存、运行的是当前文件、终端环境(venv)是否正确。
常见误区
-
误区:所有循环都改推导式才专业。
-
正解:复杂逻辑强行压缩会降低可维护性。
-
误区:一行塞太多条件。
-
正解:可读性下降就拆开写。