Python將函式作為返回值

2021-08-28 11:54:06 字數 1016 閱讀 8442

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

def lazy_sum(*args):

def sum():

ax = 0

for n in args:

ax = ax + n

return ax

return sum

請再注意一點,當我們呼叫lazy_sum()時,每次呼叫都會返回乙個新的函式,即使傳入相同的引數:

>>> f1 = lazy_sum(1, 3, 5, 7, 9)

>>> f2 = lazy_sum(1, 3, 5, 7, 9)

>>> f1==f2

注意到返回的函式在其定義內部引用了區域性變數args,所以,當乙個函式返回了乙個函式後,其內部的區域性變數還被新函式引用,所以,閉包用起來簡單,實現起來可不容易。

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

練習利用閉包返回乙個計數器函式,每次呼叫它返回遞增整數:

def createcounter():

def f():

n = 0

while(true):

n += 1

yield n

inte = f()

def counter():

return next(inte)

return counter

# 測試:

countera = createcounter()

print(countera(), countera(), countera(), countera(), countera()) # 1 2 3 4 5

counterb = createcounter()

if [counterb(), counterb(), counterb(), counterb()] == [1, 2, 3, 4]:

print('測試通過!')

else:

print('測試失敗!')

函式作為返回值

就像常見的函式一樣,lambda 表示式可以返回乙個函式指標 委託例項 這就意味著我們能夠使用乙個 lambda 表示式來建立並返回另乙個 lambda 表示式。這種行為在很多場景下都是非常有用的。我們先來看下面這個例子 1 func saymyname string language 2 10ca...

將引用作為函式返回值

要以引用返回函式值,則函式定義時必須遵循以下格式 型別識別符號 函式名 形參列表及型別說明 可見,以引用返回函式值,定義函式時需要在函式名前加 引用作為函式的返回值時,函式的返回值可以理解為函式返回了乙個變數 事實上,函式返回引用時,它返回的是乙個指向返回值的隱式指標 因此,值為引用的函式可以用作賦...

將「引用」作為函式返回值型別

格式 型別識別符號 函式名 形參列表及型別說明 好處 在記憶體中不產生被返回值的副本 注意 正是因為這點原因,所以返回乙個 區域性變數的引用是不可取的。因為隨著該 區域性變數生存期的結束,相應的引用也會失效,產生runtime error 注意事項 1 不能返回 區域性變數的引用。這條可以參照eff...