python 高階函式 返回函式

2021-09-29 03:00:32 字數 1418 閱讀 8336

此文參考自廖雪峰python

何為高階函式?

高階函式英文叫higher-order function。

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

高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。

乙個函式可以返回乙個計算結果,也可以返回乙個函式

例:

def

lazy_sum

(*args)

:def

sum():

ax =

0for n in args:

ax = ax + n

return ax

return

sum#lazy_sum函式返回sum函式

當我們呼叫lazy_sum()時,返回的並不是求和結果,而是求和函式:

>>

> f = lazy_sum(1,

3,5,

7,9)

>>

> f

<

locals

>

.sum at 0x101c6ed90

>

呼叫函式f時,才真正計算求和的結果:

>>

> f(

)25

在這個例子中,我們在函式lazy_sum中又定義了函式sum,並且,內部函式sum可以引用外部函式lazy_sum的引數和區域性變數,當lazy_sum返回函式sum時,相關引數和變數都儲存在返回的函式中,這種稱為「閉包(closure)」的程式結構擁有極大的威力。

當我們呼叫lazy_sum()時,每次呼叫都會返回乙個新的函式,即使傳入相同的引數,f1()和f2()的呼叫結果互不影響:

>>

> f1 = lazy_sum(1,

3,5,

7,9)

>>

> f2 = lazy_sum(1,

3,5,

7,9)

>>

> f1==f2

false

>>

> f1(

)==f2(

)true

另乙個需要注意的問題是,返回的函式並沒有立刻執行,而是直到呼叫了f()才執行。

返回閉包時牢記一點:返回函式不要引用任何迴圈變數,或者後續會發生變化的變數。

如果一定要引用迴圈變數怎麼辦?方法是再建立乙個函式,用該函式的引數繫結迴圈變數當前的值,無論該迴圈變數後續如何更改,已繫結到函式引數的值不變

Python基礎 高階 返回函式

帶返回結果的函式 示例 usr bin env python3 coding utf 8 python 返回函式 求和,返回值 defsum x,y return x y print sum 1,2 執行結果 d pythonproject python run.py 3延遲返回結果的函式 示例 u...

python返回函式 python中返回函式

python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g 仔細觀察上面的函式定義,我們在函...

python 返回函式

返回函式 python的函式不但可以返回int str list dict等資料型別,還可以返回函式!例如,定義乙個函式 f 我們讓它返回乙個函式 g,可以這樣寫 deff print call f 定義函式g defg print call g 返回函式g return g仔細觀察上面的函式定義,...