當前位置:成語大全網 - 書法字典 - 什麽是python高階函數?

什麽是python高階函數?

1、地圖

map()函數有兩個參數,壹個是函數,另壹個是Iterable。map將依次作用於序列的每個元素,並將結果作為新的叠代器返回。

例如,如果我們有壹個函數f(x)=x*2,我們應該將這個函數應用於壹個列表[1,2,3,4,5,6,7,8,

9],可以使用map()。

& gt& gt& gt定義f(x):

...返回x*2

...

& gt& gt& gtr = map(f,[1,2,3,4,5,6,7,8,9])

& gt& gt& gt列表(r)

[2, 4, 6, 8, 10, 12, 14, 16, 18]

所以map()作為壹個高階函數,實際上抽象了運算規則,所以我們不僅可以計算簡單的f(x)=x*2,還可以計算任何復雜的函數,比如把這個列表中的所有數字轉換成字符串:

& gt& gt& gtlist(map(str,[1,2,3,4,5,6,7,8,9]))

["1", "2", "3", "4", "5", "6", "7", "8", "9"]

2、減少

Reduce是對序列[x1,x2,

X3……].....],這個函數必須接收兩個參數,reduce將繼續用序列的下壹個元素累加結果。簡單來說,先計算x1和x2的結果,再用x3計算結果,以此類推。例如,序列求和可以通過reduce來實現。

& gt& gt& gt從functools導入減少

& gt& gt& gtdef add(x,y):

...返回x + y

...

& gt& gt& gtreduce(add,[1,3,5,7,9])

25

換句話說,假設python不提供int()函數,妳可以自己寫壹個函數把字符串轉換成整數,而且只需要幾行代碼。

3、過濾

用於過濾序列。與映射函數類似,過濾器也接收函數和序列。與map不同的是,filter依次作用於每個元素,然後根據返回值的真假來決定是保留還是丟棄該元素。例如,在壹個列表中,偶數被刪除,只有奇數被保留。妳可以寫:

def is_odd(n):

返回n % 2 == 1

list(filter(is_odd,[1,2,4,5,6,9,10,15]))

#結果:[1,5,9,15]

刪除序列中的空字符串,可以這樣寫:

def not_empty:

返回s和s.strip()

list(filter(not_empty,["A ",""," B ",None," C "," "]))

#結果:["A "," B "," C"]

可見,使用filter()高階函數的關鍵是正確實現壹個濾波函數。

4、排序

無論是冒泡排序還是快速排序,排序的核心都是比較兩個元素的大小。如果是數字,我們可以直接比較,但是如果是壹個字符串或者兩個dict呢?直接比較數學大小是沒有意義的。所以比較的過程必須通過函數抽象出來,Python內置的sorted()函數可以對列表進行排序:

& gt& gt& gt已排序([36,5,-12,9,-21])

[-21, -12, 5, 9, 36]

另外,sorted()函數也是壹個高階函數,它還可以接收壹個key函數實現自定義排序,比如按絕對值排序:

& gt& gt& gt已排序([36,5,-12,9,-21],key=abs)

[5, 9, -12, -21, 36]