中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么理解Python的函數式編程

發布時間:2020-08-25 10:08:15 來源:億速云 閱讀:129 作者:Leah 欄目:編程語言

本篇文章為大家展示了怎么理解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的函數式編程,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥阳县| 高尔夫| 游戏| 剑阁县| 武宁县| 舟山市| 章丘市| 仙桃市| 罗源县| 环江| 灵山县| 方正县| 连山| 苍山县| 临漳县| 缙云县| 饶平县| 普安县| 民和| 灌南县| 仁布县| 天气| 吉木乃县| 彰武县| 鄢陵县| 汤阴县| 阳西县| 乌鲁木齐市| 兴安盟| 屏东市| 富蕴县| 上林县| 阿城市| 雷波县| 漳州市| 汽车| 寿光市| 沈阳市| 阆中市| 柘城县| 富顺县|