您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么理解Python的函數式編程,代碼簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
函數式編程就是一種抽象程度很高的編程范式,純粹的函數式編程語言編寫的函數沒有變量,因此,任意一個函數,只要輸入是確定的,輸出就是確定的,這種純函數我們稱之為沒有副作用。函數式編程的一個特點就是,允許函數接收函數作為參數,也允許把函數作為返回值返回。Python對于函數式編程提供部分支持。由于Python允許使用變量,因此Python不是純函數式編程語言。
高階函數
所謂高階函數,就是允許函數的參數接收其他函數 下面介紹幾個python內置的高階函數:
map() map()函數接收兩個參數,一個序列,一個函數。 map()的作用就是把傳入的函數依次作用于序列的元素,然后把結果作為一個Iterator返回。
def function(x): return x * x r = map(function,[1,2,3,4,5]) print('map result:',list(r)) //運行結果: //map result: [1, 4, 9, 16, 25]
reduce() reduce()也接收兩個參數,一個函數,一個序列; reduce()也把函數作用在序列上,但是這個函數必須接收兩個參數,reduce把結果繼續和系列的下一個元素做累計計算。
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])) //運行結果: //reduce result: 15
filter() filter()的功能是過濾序列 跟map()類似,filter也接收一個函數一個序列 filter把函數作用于序列的每一個元素,根據函數返回的True或者False決定元素的保留還是去掉
def isOdd(x): return x % 2 == 1 p = list(filter(isOdd,[1,2,3,4,5])) print('filter result:',p) //運行結果: //filter result: [1, 3, 5]
sorted() 顧名思義,sorted()的功能就是對序列進行排序 sorted也是一個高階函數,可以接受一個key函數。key指定的函數將作用于list的每個元素上,并根據key函數返回的結果進行排序。
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)) //運行結果: //sorted(arr,key=abs): [0, -13, 23, 45, 46, -70, 85] //sorted(arr,key=abs,reverse=True) [85, -70, 46, 45, 23, -13, 0]
返回函數
高階函數不僅能接受函數作為參數,還能把函數作為返回值返回。
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()) //運行結果: //.sum at 0x109c85950> //f()= 15 #運行結果表明,當我們調用lazy_sum的時候并不直接返回計算結果,而是返回sum函數,當我們執行f()的時候才會計算結果*
匿名函數
有些時候我們傳入一個函數作為參數的時候,不必要每次都對他進行顯性的定義,python提供lambda創建匿名函數 匿名函數有一個現在就是只能有一個表達式,不用寫return,表達式的結果就是返回值 匿名函數沒有名字所以不存在函數名沖突的問題,使用匿名函數利于減少代碼,這與python倡導理念也是一致的。
s = reduce(lambda x,y: x+y,[1,2,3,4,5]) print('s=',s) //運行結果: //s= 15
偏函數
我理解的偏函數的功能是這樣的:
假如你有一個這樣的函數:它的功能就是對人打招呼
def sayHello(name,greet): print(greet,name)
假設接下來你要對名字是'xiaoMing'這個人,用一百種方式跟他打招呼。 如果你知道默認參數,那么你肯定會想到用它,當然沒錯,但是考慮到每次傳入實在是太麻煩了,所以:
def sayHelloToXiaoMing(greet,name='xiaoMing'): return sayHello(name,greet) sayHelloToXiaoMing('I love U');
其實sayHelloToXiaoMing就是sayHello的一個偏函數。 那么偏函數的功能到底是??沒錯,偏函數就是幫助我們直接創建一個偏函數的,而不需要我們自己去創建:
from functools import partial sayHelloToTom = partial(sayHello,'Tom') sayHelloToTom('Sawadika')
上述內容就是怎么理解Python的函數式編程,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。