第 26 课 · 阶段四 · 函数与模块
lambda 与高阶函数
lambda 是一行定义的匿名函数,配合 map、filter、sorted 等高阶函数,能写出非常简洁的代码。这一课把它们全部讲透。
🎯 学完本课你将掌握
- 写出 lambda 匿名函数
- 熟练使用 map、filter、sorted 等高阶函数
- 理解高阶函数“函数也能当参数”
一、lambda 基础
语法:lambda 参数: 表达式。它是没有名字、只有一行表达式的函数,常用于“用完即走”的小函数。
lambda 入门.py
1# 等价写法2def add(a, b):3 return a + b45add2 = lambda a, b: a + b6print(add(2, 3)) # 57print(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]45# 也可以传现成函数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)]910# 按字符串长度排序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 "及格")34# 推荐:复杂逻辑用 def5def 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 函数式编程的入门钥匙。