python中對閉包的理解(1)
阿新 • • 發佈:2018-11-22
今天聊下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
閉包的簡單概念就介紹到這,下次再繼續探討