函數式程式設計(Functional Programming)或函數程式設計,是一種程式設計範式。
它將電腦運算視為數學上的函數運算,並且避免使用程式狀態以及變數物件。
以上只是簡單的函數式程式設計的概念,我們只需簡單了解即可。
在 Python 中,函數式程式設計主要由幾個函數的使用構成:lambda(), map(), reduce(), filter()等。
lambda 函數,再成為匿名函數。 lambda 函數只能有一個表達式,而不需要寫 return 來傳回函數的值。當然,匿名函數也是函數對象,同樣可以把匿名函數賦值給一個變數。
也可以把匿名函數當作回傳值來回傳
可以看出,變數f 就是一個lambda 函數類型,需要使用f()來呼叫函數。
map 函數接收兩個參數,一個是函數,一個是Interable (可迭代序列),map 函數依序將函數作用到序列的每個元素,並把結果當作新的Interable 回傳。
看一個例子:
一個簡單的列表解析,把列表a 的每個元素都加2,用map 函數可以寫成:
由於map 函數傳回的是一個惰性序列,需要透過list()等函數來呼叫它。
雖然上面的程式碼看起來比直接寫for 迴圈要複雜,但是當資料量很大的情況下,Python 的for 效率就不是很高了,而map 的效率是可以接近C 語言的。同時程式碼也簡潔很多,簡直裝X神器。
另一個小例子,把列表中的元素轉換成字串,一條指令
它和map 有些像,不過map 是用來逐一遍歷,而reduce 函數是用來遞歸計算的。
一個簡單的序列求和
對列表a 的各個元素依序求和,再看一個自製的int()函數的例子
這是Python 內建函數int 的用法
我們透過reduce 和map 函數也可以實作如下
先用map 函數來遍歷23465 這個字串列表,然後透過reduce 函數遞歸應用列表每個元素到lambda 函數。
它同樣接收一個函數和一個序列,filter()把傳入的函數依序作用於每個元素,然後根據回傳值是True 還是False 決定保留還是丟棄該元素。
使用這些函數,不僅可以讓我們的程式碼更加簡潔,同時在大數據量或計算密集時,能夠大幅提高效率。
以上是都應該了解的Python函數式編程的詳細內容。更多資訊請關注PHP中文網其他相關文章!