怎么理解Python的函數(shù)式編程

本篇文章為大家展示了怎么理解Python的函數(shù)式編程,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有安徽免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語言編寫的函數(shù)沒有變量,因此,任意一個(gè)函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱之為沒有副作用。函數(shù)式編程的一個(gè)特點(diǎn)就是,允許函數(shù)接收函數(shù)作為參數(shù),也允許把函數(shù)作為返回值返回。Python對于函數(shù)式編程提供部分支持。由于Python允許使用變量,因此Python不是純函數(shù)式編程語言。

高階函數(shù)

所謂高階函數(shù),就是允許函數(shù)的參數(shù)接收其他函數(shù) 下面介紹幾個(gè)python內(nèi)置的高階函數(shù):

map() map()函數(shù)接收兩個(gè)參數(shù),一個(gè)序列,一個(gè)函數(shù)。 map()的作用就是把傳入的函數(shù)依次作用于序列的元素,然后把結(jié)果作為一個(gè)Iterator返回。

def function(x): 
return x * x 
r = map(function,[1,2,3,4,5]) 
print('map result:',list(r)) 
//運(yùn)行結(jié)果: 
//map result: [1, 4, 9, 16, 25]

reduce() reduce()也接收兩個(gè)參數(shù),一個(gè)函數(shù),一個(gè)序列; reduce()也把函數(shù)作用在序列上,但是這個(gè)函數(shù)必須接收兩個(gè)參數(shù),reduce把結(jié)果繼續(xù)和系列的下一個(gè)元素做累計(jì)計(jì)算。

from functools import reduce
 def function1(x,y): 
return x + y 
reduce(function1,[1,2,3,4,5]) 
print('reduce result:',reduce(function1,[1,2,3,4,5])) 
//運(yùn)行結(jié)果: 
//reduce result: 15

filter() filter()的功能是過濾序列 跟map()類似,filter也接收一個(gè)函數(shù)一個(gè)序列 filter把函數(shù)作用于序列的每一個(gè)元素,根據(jù)函數(shù)返回的True或者False決定元素的保留還是去掉

def isOdd(x): 
return x % 2 == 1 
p = list(filter(isOdd,[1,2,3,4,5])) 
print('filter result:',p) 
//運(yùn)行結(jié)果: 
//filter result: [1, 3, 5]

sorted() 顧名思義,sorted()的功能就是對序列進(jìn)行排序 sorted也是一個(gè)高階函數(shù),可以接受一個(gè)key函數(shù)。key指定的函數(shù)將作用于list的每個(gè)元素上,并根據(jù)key函數(shù)返回的結(jié)果進(jìn)行排序。

arr = [23,0,45,-13,46,85,-70]; 
print('sorted(arr)
sorted(arr)) 
#sorted(arr): [-70, -13, 0, 23, 45, 46, 85] 
print('sorted(arr,key=abs):'
sorted(arr,key=abs)) 
print('sorted(arr,key=abs,reverse=True)'
sorted(arr,key=abs,reverse=True)) 
//運(yùn)行結(jié)果: 
//sorted(arr,key=abs): [0, -13, 23, 45, 46, -70, 85] 
//sorted(arr,key=abs,reverse=True) [85, -70, 46, 45, 23, -13, 0]

返回函數(shù)

 高階函數(shù)不僅能接受函數(shù)作為參數(shù),還能把函數(shù)作為返回值返回。

def lazy_sum(*args): 
def sum(): 
ax = 0 
for n in args: 
ax = ax + n 
return ax 
return sum 
f = lazy_sum(1,2,3,4,5) 
print(f) 
print('f()=',f()) 
//運(yùn)行結(jié)果: 
//.sum at 0x109c85950> 
//f()= 15 
#運(yùn)行結(jié)果表明,當(dāng)我們調(diào)用lazy_sum的時(shí)候并不直接返回計(jì)算結(jié)果,而是返回sum函數(shù),當(dāng)我們執(zhí)行f()的時(shí)候才會(huì)計(jì)算結(jié)果*

匿名函數(shù)

 有些時(shí)候我們傳入一個(gè)函數(shù)作為參數(shù)的時(shí)候,不必要每次都對他進(jìn)行顯性的定義,python提供lambda創(chuàng)建匿名函數(shù) 匿名函數(shù)有一個(gè)現(xiàn)在就是只能有一個(gè)表達(dá)式,不用寫return,表達(dá)式的結(jié)果就是返回值 匿名函數(shù)沒有名字所以不存在函數(shù)名沖突的問題,使用匿名函數(shù)利于減少代碼,這與python倡導(dǎo)理念也是一致的。

s = reduce(lambda x,y: x+y,[1,2,3,4,5]) 
print('s=',s) 
//運(yùn)行結(jié)果:
//s= 15

偏函數(shù)

我理解的偏函數(shù)的功能是這樣的:

假如你有一個(gè)這樣的函數(shù):它的功能就是對人打招呼

def sayHello(name,greet): 
print(greet,name)

假設(shè)接下來你要對名字是'xiaoMing'這個(gè)人,用一百種方式跟他打招呼。 如果你知道默認(rèn)參數(shù),那么你肯定會(huì)想到用它,當(dāng)然沒錯(cuò),但是考慮到每次傳入實(shí)在是太麻煩了,所以:

def sayHelloToXiaoMing(greet,name='xiaoMing'): 
return sayHello(name,greet) 
sayHelloToXiaoMing('I love U');

其實(shí)sayHelloToXiaoMing就是sayHello的一個(gè)偏函數(shù)。 那么偏函數(shù)的功能到底是??沒錯(cuò),偏函數(shù)就是幫助我們直接創(chuàng)建一個(gè)偏函數(shù)的,而不需要我們自己去創(chuàng)建:

from functools import partial 
sayHelloToTom = partial(sayHello,'Tom') 
sayHelloToTom('Sawadika')

上述內(nèi)容就是怎么理解Python的函數(shù)式編程,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:怎么理解Python的函數(shù)式編程
文章位置:http://muchs.cn/article44/gehoee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、云服務(wù)器、網(wǎng)站收錄、外貿(mào)建站、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)