Python裡的高階函式

2022-01-29 19:54:51 字數 2494 閱讀 4272

1.map() 是 python 內建的高階函式,它接收乙個函式 f 和乙個 list,並通過把函式 f 依次作用在 list 的每個元素上,得到乙個新的 list 並返回。

def f(x):

return x*x

print map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

輸出結果

[1, 4, 9, 10, 25, 36, 49, 64, 81]

2.reduce()函式也是python內建的乙個高階函式。reduce()函式接收的引數和 map()類似,乙個函式 f,乙個list,但行為和 map()不同,reduce()傳入的函式 f 必須接收兩個引數,reduce()對list的每個元素反覆呼叫函式f,並返回最終結果值。

def

f(x, y):

return x +y

reduce(f, [1, 3, 5, 7, 9])

先計算頭兩個元素:f(1, 3),結果為4;

再把結果和第3個元素計算:f(4, 5),結果為9;

再把結果和第4個元素計算:f(9, 7),結果為16;

再把結果和第5個元素計算:f(16, 9),結果為25;

由於沒有更多的元素了,計算結束,返回結果25。

上述計算實際上是對 list 的所有元素求和。雖然python內建了求和函式sum(),但是,利用reduce()求和也很簡單。

reduce()還可以接收第3個可選引數,作為計算的初始值。如果把初始值設為100,計算:

reduce(f, [1, 3, 5, 7, 9], 100)

結果將變為125,因為第一輪計算是:

計算初始值和第乙個元素:f(100, 1),結果為101。

3.filter()函式是 python 內建的另乙個有用的高階函式,filter()函式接收乙個函式 f 和乙個list,這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter()根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。

例如,要從乙個list [1, 4, 6, 7, 9, 12, 17]中刪除偶數,保留奇數,首先,要編寫乙個判斷奇數的函式:

def

is_odd(x):

return x % 2 == 1

然後,利用filter()過濾掉偶數:

filter(is_odd, [1, 4, 6, 7, 9, 12, 17])

結果:[1, 7, 9, 17]

利用filter(),可以完成很多有用的功能,例如,刪除 none 或者空字串:

def is_not_empty(s):

return s and len(s.strip()) > 0

filter(is_not_empty, ['test', none, '', 'str', ' ', 'end'])

結果:['test', 'str', 'end']

注意: s.strip(rm) 刪除 s 字串中開頭、結尾處的 rm 序列的字元。

當rm為空時,預設刪除空白符(包括'\n', '\r', '\t', ' '),如下:

a = '     123'

a.strip()

結果: '123'

a='\t\t123\r\n'

a.strip()

結果:'123'

3.sorted()

python內建的 sorted()函式可對list進行排序:

>>>sorted([36, 5, 12, 9, 21])

[5, 9, 12, 21, 36]

但 sorted()也是乙個高階函式,它可以接收乙個比較函式來實現自定義排序,比較函式的定義是,傳入兩個待比較的元素 x, y,如果 x 應該排在 y 的前面,返回 -1,如果 x 應該排在 y 的後面,返回 1。如果 x 和 y 相等,返回 0。

因此,如果我們要實現倒序排序,只需要編寫乙個reversed_cmp函式:

def reversed_cmp(x, y):

if x > y:

return -1

if x < y:

return 1

return 0

這樣,呼叫 sorted() 並傳入 reversed_cmp 就可以實現倒序排序:

>>> sorted([36, 5, 12, 9, 21], reversed_cmp)

[36, 21, 12, 9, 5]

sorted()也可以對字串進行排序,字串預設按照ascii大小來比較:

>>> sorted(['bob', 'about', 'zoo', 'credit'])

['credit', 'zoo', 'about', 'bob']

'zoo'排在'about'之前是因為'z'的ascii碼比'a'小。

Python 高階函式 柯里化

python 高階函式 柯里化 這裡是一段防爬蟲文字,請讀者忽略。本文原創首發於csdn,作者idys 部落格首頁 高階函式 def couter base def inc step 1 nonlocal base base step return base return inc if name m...

Python高階1 高階函式 柯里化

高階函式 不相等自定義sort函式 內建函式 高階函式 sort函式 def sort2 lst,key none,reverse false res if key is none key lambda x,y x ifreverse key lambda x,y x y for x in lst ...

python裡的高階函式(類 之reduce

reduce 摺疊 python2 內建函式 直接呼叫 python3 functools模組下 將序列中的每個元素進行計算,計算規則 先將序列的前兩個值傳遞個函式的引數,並進行計算,將函式計算出來的結果和下乙個元素再次作為函式的兩個引數進行傳遞並計算一次類推,最終得到1個結果 1.reduce f...