chore: clean repository history

This commit is contained in:
xixu-me committed 2026-06-05 21:13:11 +08:00
commit e1fb2929c0
661 files changed
+167488

No files matched your search

@@ -0,0 +1,154 @@
---
doc_type: short
full_text: sources/02_Anonymous_function.md
---
# 02_Anonymous_function 总结
本文讲解 Python 中的匿名函数 `lambda`,重点说明它如何作为 `sort()` 的 `key` 回调函数,用于按自定义字段对列表元素排序。
## 核心内容
### 列表原地排序
Python 列表可以使用 `sort()` 方法进行原地排序:
```python
s = [10, 1, 7, 3]
s.sort()
# [1, 3, 7, 10]
```
也可以通过 `reverse=True` 进行降序排序:
```python
s.sort(reverse=True)
# [10, 7, 3, 1]
```
这类简单数值列表排序很直接,但当列表元素是字典或对象时,需要指定排序依据。
## 使用 key 函数排序
对于字典列表,例如股票组合数据:
```python
{'name': 'IBM', 'price': 91.1, 'shares': 50}
```
如果要按股票名称排序,需要提供一个 `key` 函数:
```python
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
```
`sort()` 会对每个列表元素调用 `stock_name()`,并使用返回值作为排序依据。
这体现了 [[concepts/回调函数]] 的典型用法:调用者把一个函数传给另一个函数,由后者在合适时机调用它。
## 回调函数
文中指出,`key` 函数就是一种回调函数。`sort()` 方法会“回调”用户传入的函数,以获得每个元素的排序关键值。
这类函数通常有以下特点:
- 很短;
- 常常只包含一行逻辑;
- 往往只服务于一次操作;
- 不一定值得单独命名定义。
因此,Python 提供了 `lambda` 作为更简洁的写法。
## lambda:匿名函数
`lambda` 可以创建一个未命名函数,用于计算单个表达式。例如:
```python
portfolio.sort(key=lambda s: s['name'])
```
它等价于:
```python
def stock_name(s):
return s['name']
portfolio.sort(key=stock_name)
```
但 `lambda` 更短,尤其适合这种只在当前调用中使用的小函数。
相关主题可整理为 lambda匿名函数、[[concepts/函数作为对象]] 和 高阶函数。
## lambda 的限制
`lambda` 在 Python 中受到较强限制:
- 只能包含单个表达式;
- 不能包含语句;
- 不能写普通的 `if`、`while` 等语句结构;
- 最常见用途是作为 `sort()`、`sorted()` 等函数的 `key` 参数。
因此,`lambda` 适合简单转换或字段提取,不适合复杂逻辑。复杂逻辑仍应使用普通 `def` 函数。
## 练习要点
### Exercise 7.5:按字段排序
读取股票组合数据后,先定义普通函数:
```python
def stock_name(s):
return s.name
```
再按股票名称排序:
```python
portfolio.sort(key=stock_name)
```
该练习强调:`sort()` 不是直接比较整个对象,而是使用 `key` 函数返回的字段值进行比较。
### Exercise 7.6:使用 lambda 按字段排序
可以使用 `lambda` 按持股数量排序:
```python
portfolio.sort(key=lambda s: s.shares)
```
也可以按股票价格排序:
```python
portfolio.sort(key=lambda s: s.price)
```
这些例子说明,`lambda` 可以把一次性的字段提取逻辑直接写在函数调用中,避免额外定义命名函数。
## 关键概念
- lambda匿名函数:用 `lambda` 创建只包含单个表达式的匿名函数。
- [[concepts/回调函数]]:把函数传入另一个函数,由后者在执行过程中调用。
- 排序key函数:通过 `key` 参数指定排序依据。
- 高阶函数:接收函数作为参数的函数,例如 `sort(key=...)`。
- [[concepts/函数作为对象]]:Python 中函数可以赋值、传参和作为返回值使用。
## 总结
本文的核心思想是:当需要对复杂数据结构排序时,可以通过 `key` 函数指定排序依据;如果这个函数逻辑很简单且只使用一次,就可以用 `lambda` 写成匿名函数,使代码更简洁。
## Related Concepts
- [[concepts/排序-key-函数]]
- [[concepts/函数]]
- [[concepts/列表与序列]]
- [[concepts/Python-函数参数]]
- [[concepts/Python-运算符与表达式]]
- [[concepts/字典与数据建模]]
- [[concepts/类与对象]]
- [[concepts/绑定方法]]
- [[concepts/闭包]]
- [[concepts/Python-装饰器]]