Python學習筆記 函式式程式設計 高階函式

2021-07-14 17:26:10 字數 1787 閱讀 9592

【根據廖雪峰python教程整理】

高階函式英文叫higher-order function

。什麼是高階函式?我們以實際**為例子,一步一步深入概念。

一、變數可以指向函式

以python

內建的求絕對值的函式

abs()

為例,呼叫該函式用以下**:

>>> abs(-10) 10

但是,如果只寫abs

呢?>>> abs

可見,abs(-10)

是函式呼叫,而

abs是函式本身。

要獲得函式呼叫結果,我們可以把結果賦值給變數:

>>> x = abs(-10)

>>> x 10

但是,如果把函式本身賦值給變數呢?

>>> f = abs

>>> f

結論:函式本身也可以賦值給變數,即:變數可以指向函式。

如果乙個變數指向了乙個函式,那麼,可否通過該變數來呼叫這個函式?用**驗證一下:

>>> f = abs

>>> f(-10) 10

成功!說明變數f

現在已經指向了

abs函式本身。

二、函式名也是變數

那麼函式名是什麼呢?函式名其實就是指向函式的變數!對於abs()

這個函式,完全可以把函式名

abs看成變數,它指向乙個可以計算絕對值的函式!

如果把abs

指向其他物件,會有什麼情況發生?

>>> abs = 10

>>> abs(-10)

traceback (most recent call last):

file "", line 1, in

typeerror: 'int' object is not callable

把abs

指向10

後,就無法通過

abs(-10)

呼叫該函式了!因為

abs這個變數已經不指向求絕對值函式了!

當然實際**絕對不能這麼寫,這裡是為了說明函式名也是變數。要恢復abs

函式,請重啟

python

互動環境。

注:由於abs

函式實際上是定義在

__builtin__

模組中的,所以要讓修改

abs變數的指向在其它模組也生效,要用

__builtin__.abs = 10。

三、傳入函式

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

乙個最簡單的高階函式:

def add(x, y, f):

return f(x) + f(y)

當我們呼叫add(-5, 6, abs)

時,引數x,

y和f分別接收-5,

6和abs,根據函式定義,我們可以推導計算過程為:

x ==> -5

y ==> 6

f ==> abs

f(x) + f(y) ==> abs(-5) + abs(6) ==> 11

用**驗證一下:

>>> add(-5, 6, abs) 11

編寫高階函式,就是讓函式的引數能夠接收別的函式。

小結:把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。

Python學習筆記之 函式式程式設計

函式式程式設計的乙個特點就是,允許把函式本身作為引數傳入另乙個函式,還允許返回乙個函式。變數可以指向函式 f abs f 10 10函式名也是變數 abs 10 abs 10 traceback most recent call last file line 1,in typeerror int o...

python學習筆記(四) 函式式程式設計

1 高階函式 高階函式 higher order function 1 變數可以指向函式 函式本身也可以賦值給變數。2 函式名也是變數 指向函式的變數。3 傳入函式 變數能夠指向函式,函式的引數能接收變數,乙個函式就可以接收另乙個函式作為引數。接收兩個引數 函式,iterable map 將傳入的函...

python學習筆記011 函式式程式設計

物件導向 面向過程 函式式程式設計 側重函式的作用,注重函式結果的傳遞 函式可以被賦值,也可以接受其他的值 1.函式是一等公民 與其他變數一樣,可以賦值和被賦值,可以作為引數傳遞 2.只用表示式不用語句 表示式是乙個單純的運算過程,總有返回值,語句是執行某種操作,沒有返回值。即每一步運算要單純,有明...