您好,登錄后才能下訂單哦!
函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個(gè)函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱之為沒有副作用。而允許使用變量的程序設(shè)計(jì)語言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數(shù)是有副作用的。
函數(shù)式編程的一個(gè)特點(diǎn)就是,允許把函數(shù)本身作為參數(shù)傳入另一個(gè)函數(shù),還允許返回一個(gè)函數(shù)!
Python對函數(shù)式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數(shù)式編程語言。
高階函數(shù)
變量可以指向函數(shù)
函數(shù)名其實(shí)就是變量
函數(shù)名是什么?函數(shù)名其實(shí)就是指向函數(shù)的變量,對于abs這個(gè)函數(shù),完全可以把函數(shù)名看做成為一個(gè)變量,
傳入函數(shù)
既然變量可以指向函數(shù),函數(shù)的參數(shù)可以接受變量,那么一個(gè)函數(shù)就可以當(dāng)做另一個(gè)函數(shù)的變量,這種函數(shù)就被稱為高階函數(shù)
def add(x,y,f): return f(x)+f(y)
下面介紹一個(gè)內(nèi)置的高階函數(shù)
map接受兩個(gè)參數(shù),一個(gè)是Iterable一個(gè)是函數(shù)。map將傳入的函數(shù)依次作用于到序列的每一個(gè)元素上,有點(diǎn)想列表生成式,并把結(jié)果作為寫的Iterator返回
map得到的結(jié)果是一個(gè)Iterator,所以要用list()函數(shù)讓整個(gè)序列變成一個(gè)list
list不是Iterator因?yàn)槭荹] , generator 是Iterator()
可以使用iter來將Iterable變成Iterator
本實(shí)例,實(shí)驗(yàn)了str
reduce用法
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
比如對一個(gè)序列求和
fliter
filter用于過濾序列,和map類似,filter也接受一個(gè)函數(shù)和一個(gè)序列,和map不同的是,filter把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素
def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15])) # 結(jié)果: [1, 5, 9, 15]
filter與reduce和map一樣,反悔的都是Iterator惰性序列,需要用list轉(zhuǎn)換
關(guān)于slice中的切片
str[::2]相當(dāng)于正數(shù)開始2個(gè)一取,str[::-2]從倒數(shù)第一個(gè)元素開始,2個(gè)一取
Sorted
排序算法
排序也是在程序中經(jīng)常用到的算法,無論使用冒泡排序還是快速排序,排序的核心是比較兩個(gè)元素的大小。
數(shù)字我們可以直接比較,但如果是字符串或者是兩個(gè)dict
sorted也是一個(gè)高階函數(shù),可以用key函數(shù)來實(shí)現(xiàn)自定義的排序
>>> sorted([36, 5, -12, 9, -21], key=abs) [5, 9, -12, -21, 36]
默認(rèn)情況下,對字符串排序,是按照ASCII的大小比較的,由于'Z' < ‘a(chǎn)',結(jié)果,大寫字母Z會(huì)排在小寫字母a的前面。
這樣,我們給sorted傳入key函數(shù),即可實(shí)現(xiàn)忽略大小寫的排序:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower) ['about', 'bob', 'Credit', 'Zoo']
要進(jìn)行反向排序,不必改動(dòng)key函數(shù),可以傳入第三個(gè)參數(shù)reverse=True:
>>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True) ['Zoo', 'Credit', 'bob', 'about']
map reduce filter sorted
以上所述是小編給大家介紹的Python函數(shù)式編程—高階函數(shù)詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對億速云網(wǎng)站的支持!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。