Python學習筆記(十一) 函式式程式設計

2021-09-07 21:41:18 字數 1797 閱讀 9923

一、函式式程式設計理念

函式式程式設計就是一種抽象程度很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式我們稱之為沒有***。而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函式是有***的。

函式式程式設計的乙個特點就是,允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式!

python對函式式程式設計提供部分支援。由於python允許使用變數,因此,python不是純函式式程式語言。

二、高階函式

1、變數指向函式

>>> f = abs

>>> f(-10)

10

2、函式名是變數

>>> abs = 10

>>> abs(-10

)traceback (most recent call last):

file

"", line 1, in

typeerror:

'int

'object

is not callable

abs指向10後,就無法通過abs(-10)呼叫該函式了!因為abs這個變數已經不指向求絕對值函式而是指向乙個整數10

當然實際**絕對不能這麼寫,這裡是為了說明函式名也是變數。要恢復abs函式,請重啟python互動環境。

注:由於abs函式實際上是定義在import builtins模組中的,所以要讓修改abs變數的指向在其它模組也生效,要用import builtins; builtins.abs = 10

3、傳入函式

既然變數可以指向函式,函式的引數能接收變數,那麼乙個函式就可以接收另乙個函式作為引數,這種函式就稱之為高階函式。

def add(x, y, f):

return f(x) + f(y)

4、map

(1)函式作用

map()函式接收兩個引數,乙個是函式,乙個是iterablemap將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。

(2)demo

>>> def f(x):

... return x * x

...>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> list(r)

[1, 4, 9, 16, 25, 36, 49, 64, 81]

傳入的第乙個引數是f(x)函式,得到的結果r是乙個惰性序列iterator,所以使用list()函式讓他計算出整個序列並返回乙個list。

(3)list轉換為字串

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

5、reduce

(1)作用

reduce把乙個函式作用在乙個序列[x1, x2, x3, ...]上,這個函式必須接收兩個引數,reduce把結果繼續和序列的下乙個元素做累積計算

python 學習筆記十一 函式

實參型別 不定長引數 引數的裝包 引數的解包 返回值help 函式名 文件字串 作用域命名空間 namespace globals 遞迴式函式 高階函式 匿名函式 lambda 表示式 裝飾器最後 定義函式 格式 def 函式名 形參1 形參n 塊 注意 函式需要呼叫的時候才會執行 呼叫函式 格式 ...

Python學習筆記(十一) Python函式

以mark lutz著的 python學習手冊 為教程,每天花1個小時左右時間學習,爭取兩周完成。寫在前面的話 2013 7 21 22 00 學習筆記 1,def是python中的乙個可執行語句 函式並不存在,直到python執行了def後才存在。def建立了乙個物件,並將其賦值給乙個變數名,這個...

Python學習筆記 十一 (函式的使用)

高內聚低耦合是評價乙個程式優劣的標準之一,而函式的靈活使用就能很好的提高每個功能之間的內聚耦合程度,下面我對python的函式使用進行簡單總計,希望能對你我有益。一 python中函式的定義 函式是指一段具有特定功能可以重用的 塊。python中的 表示 def function a return ...