15 分钟
Python 进阶

map/filter/reduce

函数式编程三剑客

  • 使用 map 转换序列
  • 使用 filter 筛选
  • 使用 reduce 聚合

map 转换

示例代码(可运行)

filter 筛选

示例代码(可运行)

reduce 聚合

示例代码(可运行)
ℹ️推导式 vs 函数式

列表推导式比 map/filter+lambda 更 Pythonic。reduce 只在复杂聚合时用,简单求和直接用 sum() 就行。

预测输出
from functools import reduce
print(reduce(lambda a,b: a*b, [1,2,3,4]))
找 Bugmap的第二个参数必须是可迭代对象,不能是多个独立参数。
list(map(lambda x: x*2, 1,2,3))
填空题填写空白处的代码
from functools import reduce result = reduce(lambda a,b: a+b, [1,2,3]) print(result) #
选择题

filter(lambda x: x>2, [1,2,3,4]) 结果?

选择题

Python 中比 map/filter + lambda 更推荐、可读性更好的等价写法通常是?

资深工程师加餐

底层原理 · 大厂视角 · 工程经验,点卡片展开

内层函数(或 lambda)捕获的是外层变量本身,而不是定义那一刻的值;循环里定义的多个函数,循环结束后调用往往都拿到最后的值。解决办法是用默认参数 f(x=x) 立即绑定,或用工厂函数包一层。配合 LEGB 作用域顺序(局部→外层→全局→内建)理解,90% 的作用域谜题都能解开。

挑战任务

函数式挑战

简单+50 XP

用map/reduce计算列表中每个数的平方和。

函数式挑战
2 个测试用例

课后作业

管道操作

中等+20 XP

用函数式风格:筛选偶数→平方→求和。

管道操作
1 个测试用例