說說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。

Tags: