1. 程式人生 > >Python返回函式

Python返回函式

函式作為返回值

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

先舉個栗子,要實現一個可變引數的函式求和,通常這麼寫:

def calc_sum(*args):
    ax = 0
    for n in args:
        ax += n
    return ax

那麼,如果不需要立刻求和,而是在後面的程式碼中,根據需要再去計算那怎麼辦呢?這時候就可以不返回求和的結果,而是返回求和的函式,如下:

def lazy_sum(*args):
    def sum():
        ax = 0
        for n in args:
            ax += n
        return
ax return sum

這時候,我們呼叫lazy_sum()的時候,返回的不是結果,而是求和的函式。這個在上一篇講filter()函式的時候,裡面有個例子是求:給出範圍內所有的素數。裡面有一個篩選函式,返回的就是一個函式。點選跳轉

上面的函式還有個要注意的地方是這樣,當呼叫lazy_sum()時,每次呼叫都會返回一個全新的函式,即便傳入相同的引數:

>>> f1 = lazy_sum(10, 333, 15, 27, 89)
>>> f2 = lazy_sum(10, 333, 15, 27, 89)
>>> f1==f2
False

f1()和f2()的呼叫結果互不影響。