一、函式式程式設計理念
函式式程式設計就是一種抽象程度很高的程式設計正規化,純粹的函式式程式語言編寫的函式沒有變數,因此,任意乙個函式,只要輸入是確定的,輸出就是確定的,這種純函式我們稱之為沒有***。而允許使用變數的程式語言,由於函式內部的變數狀態不確定,同樣的輸入,可能得到不同的輸出,因此,這種函式是有***的。
函式式程式設計的乙個特點就是,允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式!
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()
函式接收兩個引數,乙個是函式,乙個是iterable
,map
將傳入的函式依次作用到序列的每個元素,並把結果作為新的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 ...