# 匿名函数

在 Python 中，我们使用 `def` 语句来定义函数，比如：

```python
def double(x):
    return 2 * x
```

除了用上面的方式定义函数，Python 还提供了一个关键字 `lambda`，让我们可以创建一个匿名函数，也就是没有名称的函数。它的形式如下：

```
lambda 参数: 表达式
```

关键字 `lambda` 说明它是一个匿名函数，冒号 `:` 前面的变量是该匿名函数的参数，冒号后面是函数的返回值，注意这里不需使用 return 关键字。

我们将上面的 `double` 函数改写成一个匿名函数，如下：

```
lambda x: 2 * x
```

那怎么调用匿名函数呢？可以直接这样使用：

```python
>>> (lambda x: 2 * x)(8)
16
```

由于匿名函数本质上是一个函数对象，也可以将其赋值给另一个变量，再由该变量来调用函数，如下：

```python
>>> f = lambda x: 2 * x   # 将匿名函数赋给变量 f  
>>> f
<function <lambda> at 0x7f835a696578>
>>> f(8)
16
```

# 使用场景

`lambda` 函数一般适用于创建一些临时性的，小巧的函数。比如上面的 `double` 函数，我们当然可以使用 `def` 来定义，但使用 `lambda` 来创建会显得很简洁，尤其是在高阶函数的使用中。

看一个例子：

```python
def func(g, arr):
    return [g(x) for x in arr]
```

现在给一个列表 [1, 2, 3, 4]，利用上面的函数，对列表中的元素加 1，返回一个新的列表，你可能这样用：

```python
def add_one(x):
    return x + 1

arr = func(add_one, [1, 2, 3, 4])
```

这样做没什么错，可是 `add_one` 这个函数太简单了，使用 `def` 定义未免有点小题大作，我们改用 `lambda`：

```
arr = func(lambda x: x + 1, [1, 2, 3, 4])
```

是不是很简洁、易懂？

# 小结

- 匿名函数本质上是一个函数，没有函数名称，因此使用匿名函数不用担心函数名冲突；
- 匿名函数一般适用于创建一些临时性的，小巧的函数；


