### 1.2.1. 高阶函数
变量可以指向函数,可以把函数当作参数传入
```
# 我们可以把函数本身赋值给变量
x = len
x([1,2,3,4])
```
这时len是函数对象
**函数名也是变量**
函数名就是就是指向函数的变量,对于len()这个函数来说,我们可以把len看做是变量
**传入函数**
变量可以指向函数,函数可以接受变量。一个函数就可以接受另一个函数作为传入参数
```
def add(x,y,z):
return z(x) + z(y)
add([1,2,3,4],[4,3,1,5,6],len)
```
### 1.2.2. map映射 reduce累计
map接受两个参数,一个是函数,一个是Iterable,函数作用在序列的每一个元素上,并把结果作为Iterable返回
```
x = [1,2,3,4,5,6,7,8,9,10]
def mul(i):
return i * i
list(map(lambda s : s*s,x))
#结果[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
```
reduce也是把函数作用与序列上,但是这个函数必须接受两个参数,reduce把计算结果继续与下一个元素做累积计算
```
#对于序列x = [1,2,3,4,5,6,7,8,9,10]
from functools import reduce
# 对序列进行累计处理,让第一个元素与下一个元素的差再减去第三个元素
reduce(lambda a,b: a-b,x)
#结果-53 原因:
1 -2 = -1
-1 -3 = -4
-4 - 4 = -8
```
### 1.2.3. filter函数 过滤
filter也是把函数作用在每个序列元素上。根据函数对每个元素判断真假返回布尔值。true保留元素,false删除元素
```
# 对下列数据只保留能被2整除的数
将filter返回的Iterable变为list
x = [1,3,6,7,2,19,20,33,29,10,49]
list(filter(lambda s : s%2 ==0,x))
```
### 1.2.4. 匿名函数 Lambda
可以使用匿名函数。匿名函数也可以被一个变量保存,也可以不保存直接使用
```
f = lambda s : s*2
x = [1,2,3,4]
map(f,x)
```
```
list(map(lambda s : s*s,x))
```
### 1.2.5. 三元运算
格式:
~~~python
[on_true] if [expression] else [on_false]
~~~
![](https://img.kancloud.cn/b8/88/b888519122f44f9928a16583e302c424_516x145.png)