既然函式是乙個變數,那麼當然可以把函式作為結果值返回。先簡單看乙個示例:
首先我們定義乙個函式實現可變引數之積:
>>> from functools import reduce
>>> def fac(*args):
... return reduce(lambda x, y: x * y, args)
...>>> fac(1, 2, 3, 4, 5)
120
但是,如果不需要立即求得可變引數之積,而是在後面**中根據需要計算,怎麼做? --- 此時可以不返回求積結果,而是返回乙個求積函式。
>>> from functools import reduce
>>> def lazy_fac(*args):
... def multiply():
... return reduce(lambda x, y: x * y, args)
... return multiply
...>>> func = lazy_fac(1, 2, 3, 4, 5, 6, 7)
>>> func
.multiply at 0x000001e3e8ec47b8>
關於返回函式存在的乙個小問題,如下:
def multiply():
m_func =
for i in range(3):
def mul():
return pow(i, 3)
return m_func
mul1, mul2, mul3 = multiply()
print(mul1(), mul2(), mul3())
對於上面的**,我們計畫的想要返回0, 1, 8;然而實際卻返回了8, 8, 8,為什麼?
因為返回的函式引用了變數i,但是呼叫multiply()返回的每個函式都不是立刻執行,在執行時i已經變為3,所以每個函式都返回了8。因此我們需要注意,返回函式不要引用任何迴圈變數,或者後續可能會發生改變的變數。如果一定要引用迴圈變數,則改變如下:
def multiply():
def f(x):
return lambda: pow(x, 3)
m_func =
for i in range(3):
return m_func
mul1, mul2, mul3 = multiply()
print(mul1(), mul2(), mul3())
示例1:利用閉包返回乙個計數器函式,每次呼叫它返回遞增整數:
def createcounter():
# digit = [0]
digit = 0
def counter():
# digit[0] += 1
nonlocal digit
digit += 1
# return digit[0]
return digit
return counter
countera = createcounter()
print(countera(), countera(), countera(), countera(), countera())
上述**,注釋部分是另一種解決方案。 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 何為高階函式?高階函式英文叫higher order function。把函式作為引數傳入,這樣的函式稱為高階函式,函式式程式設計就是指這種高度抽象的程式設計正規化。高階函式除了可以接受函式作為引數外,還可以把函式作為結果值返回。乙個函式可以返回乙個計算結果,也可以返回...
python基礎 高階函式
把函式作為引數傳入,這樣的函式稱為高階函式,高階函式是函式式程式設計的體現。函式式程式設計就是指這種高度抽象的程式設計正規化。在python中,abs 函式可以完成對數字求絕對值計算。abs 10 10round 函式可以完成對數字的四捨五入計算。round 1.2 1 round 1.9 2def...