“ 函數式程式設計(Functional Programming)或者函數程式設計,是一種程式設計範型。”
它将計算機運算視為數學上的函數運算,并且避免使用程式狀态以及變量對象。
以上隻是簡單的函數式程式設計的概念,隻需簡單了解即可。
在Python中,函數式程式設計主要由幾個函數的使用構成:lambda(), map(), reduce(), filter()等。
01.lambda函數
lambda函數,又成為匿名函數。lambda函數隻能有一個表達式,而不需要寫return來傳回函數的值。當然,匿名函數也是一個函數對象,同樣可以把匿名函數指派給一個變量。
也可以把匿名函數作為傳回值來傳回
可以看出,變量f就是一個lambda函數類型,需要使用f()來調用該函數。
02.map函數
map函數接收兩個參數,一個是函數,一個是Interable(可疊代序列),map函數依次将函數作用到序列的每個元素,并把結果作為新的Interable傳回。
看一個例子:
一個簡單的清單解析,把清單a的每個元素都加2,用map函數可以寫為:
由于map函數傳回的是一個惰性序列,需要通過list()等函數來調用它。
雖然上面的代碼看起來比直接寫for循環要複雜,但是當資料量很大的情況下,Python的for效率就不是很高了,而map的效率是可以接近C語言的。同時代碼也簡潔很多,簡直裝X神器
另一個小例子,把清單中的元素轉換為字元串,一條指令
03.reduce函數
它和map有些像,不過map是用于逐一周遊,而reduce函數是用來遞歸計算的。
一個簡單的序列求和
對清單a的各個元素依次求和,再看一個自制的int()函數的例子
這是Python内置函數int的用法
我們通過reduce和map函數也可以實作如下
先用map函數來周遊23465這個字元串清單,然後通過reduce函數遞歸應用清單每個元素到lambda函數。
04. filter函數
它同樣接收一個函數和一個序列,filter()把傳入的函數依次作用于每個元素,然後根據傳回值是True還是False決定保留還是丢棄該元素。
使用這些函數,不僅可以讓我們的代碼更加簡潔,同時在大資料量或者計算密集時,能夠大大提高效率。
當然,這也和在linux新手面前使用VI指令行一樣,都是居家旅行,裝X神器呀
資料分享:
收錄了機器學習大資料的全套學習資料,在公衆号回複"AI"即可獲得!
加我的微信,擷取機器學習經典圖書《Machine Learning in Action》電子版
果喜歡我的文章,那就關注我吧!