說說Python中閉包是什麼?
- 2019 年 11 月 15 日
- 筆記
問:說說Python中閉包是什麼?
答:可以將閉包理解為一種特殊的函數,這種函數由兩個函數的嵌套組成,外函數和內函數。在一個外函數中定義了一個內函數,內函數里運用了外函數的臨時變數,並且外函數的返回值是內函數的引用。這樣就構成了一個閉包。
閉包在Python中很常見,只不過你沒特別注意這就是一個閉包。比如Python中的裝飾器Decorator,假如你需要寫一個帶參數的裝飾器,那麼一般都會生成閉包。
下面先用偽程式碼進行閉包格式的描述:
def 外層函數(參數): def 內層函數(): print("內層函數執行", 參數) return 內層函數 內層函數的引用 = 外層函數("傳入參數") 內層函數的引用()再來個閉包最簡單的例子,方便大家理解:
#閉包函數的實例 # outer是外部函數 def outer( a ): # inner是內函數 def inner( b ): #在內函數中 用到了外函數的臨時變數 print(a+b) # 外函數的返回值是內函數的引用 return inner ret = outer(5) #ret = inner ret(10) #15 ret 存了外函數的返回值,也就是inner函數的引用,這裡相當於執行inner函數
上面ret(10),運行結果是15,你看懂了嗎?在這個案例中,外函數outer有接收參數 a=5,內函數inner接收參數b=10,在內函數體中計算了a+b 即 5+10的值作為返回值,外函數返回內函數的引用,這裡引用指的是內函數inner在記憶體中的起始地址,最終調用內函數inner()得到返回值15。

