# 匿名函数与高阶函数

URL: https://caijiao.org/python/ch05/lambda-hof
Source: docs/python/ch05/lambda-hof.md
Description: 本章介绍 Python 中的匿名函数（lambda）与高阶函数（如 map、filter、reduce），帮助读者理解函数式编程在日常开发中的应用场景。

在 [Python](/python/) 中，函数不仅可以像变量一样被传递，还能作为其他函数的参数或返回值。本章将介绍匿名函数（lambda 表达式）与高阶函数的基本用法和实际应用。

## 匿名函数（lambda）

匿名函数是没有名字的函数，常用于简洁地表示一些功能简单的函数。

### 语法

```python
lambda 参数列表: 表达式
```

### 示例

```python
add = lambda x, y: x + y
print(add(3, 5))  # 输出：8
```

lambda 表达式适用于临时、一次性使用的小函数。

## 高阶函数

高阶函数是指接受函数作为参数或返回另一个函数的函数。

常见的高阶函数包括：

- `map()`
- `filter()`
- `reduce()`（需从 `functools` 模块导入）

### map()

`map(func, iterable)` 将函数应用于可迭代对象中的每个元素。

```python
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x**2, nums))
print(squares)  # 输出：[1, 4, 9, 16]
```

### filter()

`filter(func, iterable)` 用于筛选出使函数返回 `True` 的元素。

```python
nums = [1, 2, 3, 4]
even = list(filter(lambda x: x % 2 == 0, nums))
print(even)  # 输出：[2, 4]
```

### reduce()

`reduce(func, iterable)` 累积地对序列元素进行计算。

```python
from functools import reduce

nums = [1, 2, 3, 4]
product = reduce(lambda x, y: x * y, nums)
print(product)  # 输出：24
```

## 函数作为返回值

函数可以返回另一个函数，这在装饰器、回调等场景中非常有用。

```python
def make_multiplier(n):
    return lambda x: x * n

double = make_multiplier(2)
print(double(5))  # 输出：10
```

## 实战示例：对字符串列表统一处理

```python
names = ["alice", "BOB", "ChArLiE"]
standardized = list(map(lambda name: name.capitalize(), names))
print(standardized)  # 输出：['Alice', 'Bob', 'Charlie']
```

## 总结

- `lambda` 提供了一种快速定义短小函数的方式。
- 高阶函数让代码更加函数式、简洁。
- `map()`、`filter()` 和 `reduce()` 是处理序列的利器。
- 熟练使用高阶函数有助于提升代码表达力与可维护性。
