第七章 函數(shù)式編程
函數(shù)是Python內(nèi)建支持的一種封裝,我們通過(guò)把大段代碼拆成函數(shù),通過(guò)一層一層的函數(shù)調(diào)用,就可以把復(fù)雜任務(wù)分解成簡(jiǎn)單的任務(wù),這種分解可以稱之為面向過(guò)程的程序設(shè)計(jì)。函數(shù)就是面向過(guò)程的程序設(shè)計(jì)的基本單元。
而函數(shù)式編程(請(qǐng)注意多了一個(gè)“式”字)——Functional Programming,雖然也可以歸結(jié)到面向過(guò)程的程序設(shè)計(jì),但其思想更接近數(shù)學(xué)計(jì)算。
我們首先要搞明白計(jì)算機(jī)(Computer)和計(jì)算(Compute)的概念。
在計(jì)算機(jī)的層次上,CPU執(zhí)行的是加減乘除的指令代碼,以及各種條件判斷和跳轉(zhuǎn)指令,所以,匯編語(yǔ)言是最貼近計(jì)算機(jī)的語(yǔ)言。
而計(jì)算則指數(shù)學(xué)意義上的計(jì)算,越是抽象的計(jì)算,離計(jì)算機(jī)硬件越遠(yuǎn)。
對(duì)應(yīng)到編程語(yǔ)言,就是越低級(jí)的語(yǔ)言,越貼近計(jì)算機(jī),抽象程度低,執(zhí)行效率高,比如C語(yǔ)言;越高級(jí)的語(yǔ)言,越貼近計(jì)算,抽象程度高,執(zhí)行效率低,比如Lisp語(yǔ)言。
函數(shù)式編程就是一種抽象程度很高的編程范式,純粹的函數(shù)式編程語(yǔ)言編寫的函數(shù)沒(méi)有變量,因此,任意一個(gè)函數(shù),只要輸入是確定的,輸出就是確定的,這種純函數(shù)我們稱之為沒(méi)有副作用。而允許使用變量的程序設(shè)計(jì)語(yǔ)言,由于函數(shù)內(nèi)部的變量狀態(tài)不確定,同樣的輸入,可能得到不同的輸出,因此,這種函數(shù)是有副作用的。
函數(shù)式編程的一個(gè)特點(diǎn)就是,允許把函數(shù)本身作為參數(shù)傳入另一個(gè)函數(shù),還允許返回一個(gè)函數(shù)!
Python對(duì)函數(shù)式編程提供部分支持。由于Python允許使用變量,因此,Python不是純函數(shù)式編程語(yǔ)言。