### 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]
~~~
