Python函式式程式設計(一) 高階函式

2022-02-09 17:29:43 字數 1567 閱讀 4130

首先有乙個高階函式的知識。

乙個函式可以接收另乙個函式作為引數,這種函式就稱之為高階函式。

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

return

11print(add(-5, 6

, abs))

>>11

這裡涉及到的概念:

變數可以指向函式

以python內建的求絕對值的函式abs()為例,呼叫該函式用以下**:

>>> abs(-10)10

但是,如果只寫abs呢?

>>>abs

in function abs>可見,abs(-10

)是函式呼叫,而abs是函式本身。

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

>>> x = abs(-10

)>>>x

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

>>> f =abs

>>>f

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

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

>>> f = abs

>>> f(-10)

10

成功!說明變數f現在已經指向了abs函式本身。直接呼叫abs()函式和呼叫變數f()完全相同。

函式名也是變數

那麼函式名是什麼呢?函式名其實就是指向函式的變數!對於abs()這個函式,完全可以把函式名abs看成變數,它指向乙個可以計算絕對值的函式!

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

>>> abs = 10

>>> abs(-10

)traceback (most recent call last):

file

"", line 1, in

typeerror:

'int

'object

isnot callable

把abs指向10後,就無法通過abs(-10

)呼叫該函式了!因為abs這個變數已經不指向求絕對值函式而是指向乙個整數10!

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

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

python高階一 高階函式

1 函式式程式設計 python特點 不是純函式式程式設計 允許變數存在 支援高階函式 可以傳入函式作為變數 支援閉包 可以返回函式 有限度的支援匿名函式 高階函式 變數可以指向函式 函式的引數可以接收變數 乙個函式可以接收另乙個函式作為引數 def add x,y,f return f x f y...

python高階學習筆記(一) 高階函式

filter filter 函式接收乙個 函式 f 和乙個list 這個函式 f 的作用是對每個元素進行判斷,返回 true或 false,filter 根據判斷結果自動過濾掉不符合條件的元素,返回由符合條件元素組成的新list。例如,要從乙個list 1,4,6,7,9,12,17 中刪除偶數,保...

python函式式程式設計模式 python函式式程式設計

1 callable內建函式判斷乙個名字是否為乙個可呼叫函式 import math x 1 y math.sqrt callable x false callable y true 2 記錄函式 文件字串 def square x calculates the square of number x...