logo
30

高阶函数

⏱️ 30分钟

高阶函数(Higher-Order Functions):把“规则”当参数传递

你现在可能会困惑什么

“函数为什么还能当参数?听起来很抽象。”

把它想成“可插拔规则”: 流程不变,规则可替换。

一句话定义

高阶函数是“接收函数”或“返回函数”的函数。

生活类比

奶茶下单流程固定,但甜度规则可切换(三分糖/无糖)。 流程函数固定,规则函数可替换。

最小可运行例子

nums = [1, 2, 3, 4]
squares = list(map(lambda x: x * x, nums))
print(squares)  # [1, 4, 9, 16]

mapfilter

nums = [1, 2, 3, 4, 5, 6]

evans = list(filter(lambda x: x % 2 == 0, nums))
print(evans)  # [2, 4, 6]
  • map:做变换
  • filter:做筛选

课堂小测(5 分钟)

  1. map 计算列表平方。
  2. filter 筛选大于 10 的数。
  3. 对订单列表先提取金额再筛选高价值订单。

课堂小测参考答案与判分点

  • 参考答案方向:能写出可运行代码,并覆盖题目中的核心条件与边界输入。
  • 判分点 1(正确性):主流程结果正确,关键分支可执行。
  • 判分点 2(可读性):变量命名清晰,结构不过度嵌套。
  • 判分点 3(健壮性):对空值、类型错误或异常输入有基础保护。

迁移任务(课后)

把一段 for 清洗代码改成 map + filter 版本,比较可读性。

本节验收标准

你能独立做到:

  • 区分 mapfilter 职责
  • 在简单数据流中使用高阶函数
  • 判断何时回退为普通 for

常见报错与调试步骤(新手版)

  • 报错看不懂:先读最后一行错误类型(如 TypeErrorNameError),再回到对应代码行定位。
  • 不确定变量值:在关键位置临时 print(变量, type(变量)),先确认数据是否符合预期。
  • 改了代码却没生效:确认文件已保存、运行的是当前文件、终端环境(venv)是否正确。

常见误区

  • 误区:高阶函数一定更高级。

  • 正解:可读性和团队理解成本优先。

  • 误区:函数位置传了非函数对象。

  • 正解:报 not callable 时先检查参数类型。