第 26 课 · 阶段四 · 函数与模块

lambda 与高阶函数

lambda 是一行定义的匿名函数,配合 map、filter、sorted 等高阶函数,能写出非常简洁的代码。这一课把它们全部讲透。

第 26 课阶段四 · 函数与模块难度:进阶建议时长:30 分钟关键词:lambda · map · filter · sorted

🎯 学完本课你将掌握

  • 写出 lambda 匿名函数
  • 熟练使用 map、filter、sorted 等高阶函数
  • 理解高阶函数“函数也能当参数”

一、lambda 基础

语法:lambda 参数: 表达式。它是没有名字、只有一行表达式的函数,常用于“用完即走”的小函数。

lambda 入门.py
1# 等价写法
2def add(a, b):
3 return a + b
4
5add2 = lambda a, b: a + b
6print(add(2, 3)) # 5
7print(add2(2, 3)) # 5

二、map:对每个元素做映射

map 用法.py
1nums = [1, 2, 3, 4, 5]
2squares = list(map(lambda x: x ** 2, nums))
3print(squares) # [1, 4, 9, 16, 25]
4
5# 也可以传现成函数
6names = ["alice", "bob"]
7print(list(map(str.upper, names))) # ['ALICE', 'BOB']
✅ 要点
map(函数, 序列) 对每个元素执行函数,返回迭代器,要用 list() 转成列表查看。

三、filter:按条件过滤

filter 用法.py
1nums = range(1, 21)
2evens = list(filter(lambda x: x % 2 == 0, nums))
3print(evens) # [2,4,6,8,10,12,14,16,18,20]

四、sorted:按自定义规则排序

sorted 排序.py
1students = [
2 ("小明", 92),
3 ("小红", 88),
4 ("小刚", 95),
5]
6# 按分数排序:key 指定取第几个元素
7by_score = sorted(students, key=lambda s: s[1], reverse=True)
8print(by_score) # [('小刚',95),('小明',92),('小红',88)]
9
10# 按字符串长度排序
11words = ["banana", "apple", "kiwi"]
12print(sorted(words, key=len)) # ['kiwi', 'apple', 'banana']

五、高阶函数思想

高阶函数是指“接收函数作为参数”的函数。lambda 常与它们搭配,让代码在一行内完成映射/过滤/排序,语义清晰。

六、lambda 的局限

⚠️ 注意
lambda 只能写一个表达式,不能写多行、不能有 if 语句块(但可用三元表达式)。逻辑复杂时,老老实实用 def。
lambda 复杂写法对比
1# 不推荐:lambda 塞复杂逻辑
2f = lambda x: "优" if x >= 90 else ("良" if x >= 80 else "及格")
3
4# 推荐:复杂逻辑用 def
5def grade(x):
6 if x >= 90: return "优"
7 if x >= 80: return "良"
8 return "及格"

七、常见错误与解决

常见错误与解决

错误现象原因 / 解决方法
lambda 语法错误lambda 后只能跟“参数: 表达式”,别写 return、别换行。
map/filter 输出是 <map object>它们是惰性迭代器,用 list(...) 转成列表。
sorted 排序结果不对检查 key 函数取的值是否正确,是否要加 reverse=True。
✍️ 小练习
用一行代码完成:对一个数字列表求平方并只保留大于 10 的结果;再按字典中 age 字段对人员列表排序。
📌 本节小结
lambda 一行定义匿名函数;map 映射、filter 过滤、sorted 自定义排序。高阶函数让代码简洁到极致,是 Python 函数式编程的入门钥匙。