此文參考自廖雪峰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仔細觀察上面的函式定義,...