天天看點

都應該了解的Python函數式程式設計

“ 函數式程式設計(Functional Programming)或者函數程式設計,是一種程式設計範型。”

它将計算機運算視為數學上的函數運算,并且避免使用程式狀态以及變量對象。

以上隻是簡單的函數式程式設計的概念,隻需簡單了解即可。

在Python中,函數式程式設計主要由幾個函數的使用構成:lambda(), map(), reduce(), filter()等。

01.lambda函數

lambda函數,又成為匿名函數。lambda函數隻能有一個表達式,而不需要寫return來傳回函數的值。當然,匿名函數也是一個函數對象,同樣可以把匿名函數指派給一個變量。

都應該了解的Python函數式程式設計

也可以把匿名函數作為傳回值來傳回

都應該了解的Python函數式程式設計

可以看出,變量f就是一個lambda函數類型,需要使用f()來調用該函數。

02.map函數

map函數接收兩個參數,一個是函數,一個是Interable(可疊代序列),map函數依次将函數作用到序列的每個元素,并把結果作為新的Interable傳回。

看一個例子:

都應該了解的Python函數式程式設計

一個簡單的清單解析,把清單a的每個元素都加2,用map函數可以寫為:

都應該了解的Python函數式程式設計

由于map函數傳回的是一個惰性序列,需要通過list()等函數來調用它。

雖然上面的代碼看起來比直接寫for循環要複雜,但是當資料量很大的情況下,Python的for效率就不是很高了,而map的效率是可以接近C語言的。同時代碼也簡潔很多,簡直裝X神器​

都應該了解的Python函數式程式設計

另一個小例子,把清單中的元素轉換為字元串,一條指令

都應該了解的Python函數式程式設計

03.reduce函數

它和map有些像,不過map是用于逐一周遊,而reduce函數是用來遞歸計算的。

一個簡單的序列求和

都應該了解的Python函數式程式設計

對清單a的各個元素依次求和,再看一個自制的int()函數的例子

這是Python内置函數int的用法

都應該了解的Python函數式程式設計

我們通過reduce和map函數也可以實作如下

都應該了解的Python函數式程式設計

先用map函數來周遊23465這個字元串清單,然後通過reduce函數遞歸應用清單每個元素到lambda函數。

04. filter函數

它同樣接收一個函數和一個序列,filter()把傳入的函數依次作用于每個元素,然後根據傳回值是True還是False決定保留還是丢棄該元素。

都應該了解的Python函數式程式設計

使用這些函數,不僅可以讓我們的代碼更加簡潔,同時在大資料量或者計算密集時,能夠大大提高效率。

當然,這也和在linux新手面前使用VI指令行一樣,都是居家旅行,裝X神器呀​

都應該了解的Python函數式程式設計

​​​​

資料分享:

收錄了機器學習大資料的全套學習資料,在公衆号回複"AI"即可獲得!

加我的微信,擷取機器學習經典圖書《Machine Learning in Action》電子版

果喜歡我的文章,那就關注我吧!