1. 程式人生 > >python中對閉包的理解(1)

python中對閉包的理解(1)

今天聊下python中閉包的用法,首先它是在函式內再定義一個函式,內部定義的函式可以引用外部函式的引數和區域性變數,在呼叫外部函式時返回的是內部函式,但是不會立馬執行內部函式的程式體,需要單獨呼叫內部函式才會去執行。下面的程式就是閉包

首先正常定義一個求和函式:

def sum(*args):
    s = 0
    for i in args:
        s += i
    return s
print(sum(1,2,3,4,5,6))

執行結果:

21

在呼叫sum()函式時就會返回計算結果。

現在把這個函式定義在另一個函式的內部:

def lazy_sum(*args):
    def sum():
        s = 0
        for i in args:
            s += i
        return s
    return sum

內部函式引用了外部函式的引數args,外部函式最後返回的是內部函式sum,在呼叫lazy_sum()函式時,我們看下返回的是什麼

f1 = lazy_sum(1,0,9,8,7,6,5)
print(f1)

執行結果:

<function lazy_sum.<locals>.sum at 0x000000A05E2F01E0>

可以看到外部函式最後返回的是一個函式,引數和變數儲存在該函式中,此時並沒有執行函式體,需要在呼叫f1才會執行函式,因為每次返回都是返回一個函式儲存演算法和相關資料,所以每次呼叫lazy_sum()返回的函式是不同的,即使填入的引數一樣。呼叫函式f1的結果。

print(f1())

執行結果:

36

閉包的簡單概念就介紹到這,下次再繼續探討