Python_基礎個人理解_閉包
閉包
———— 個人理解簡述
閉包在某種含義上其本身其實也是一個函數。
定義的格式簡單來說為在一個函數內部再創建一個函數,
也就是一個外函數包裹了一個內函數,
在內函數裏使用了外函數的臨時變量,
外函數的“return”返回值為內函數的引用(函數名)。
在形式上與循環嵌套有些相似,
暫且也可稱之為函數嵌套。
閉包的使用可以有效的隱藏函數內部的工作細節,
只給外部使用者提供一個可以執行的內部函數的應用。
如果在外函數裏自定義了變量並且需要在內函數中對其進行修改,
需要將變量聲明為 “nonlocal” ,nonlocal 聲明變量為非本地變量,
如果確定在程序要修改外部變量,那麽建議將 nonlocal 寫在內部函數的第一行。
舉個栗子:
如圖:
在這段代碼中,在實際開發中並沒有實際意義,只是簡單示意了函數可以被當做參數和返回值使用。
有兩點需要註意:
1> 盡量不要使用全局變量,因為全局變量會破壞程序的封裝性。
2> 如果 show 函數不想被 callFunc 以外的函數進行訪問時,是無法控制的
基於以上兩點,圖中代碼可以進行優化修改:
代碼進行優化後,去不再使用全局變量。而且將 show 函數封裝在了 callFunc 函數內部,使外部不可見,不能使用 show 函數,隱藏了實現細節
程序在執行時,callFunc 函數返回了內部定義的 show 函數,並且 在 show 函數內部
在 show 函數返回時,保存了當前的執行環境,也就是會在 show 函數中使用的外部變量 n 。
因為 n 是一個 callFunc 函數中的局部變量,正常情況下 callFunc 函數執行結束後,n 就會被釋放。
但是現在因為 callFunc 函數中返回了 show 函數,show 函數在外部還會再執行,所以程序會將 show 函數所需的執行環境保存下來。
水平一般,能力有限,如有不足,加以改正。
Python_基礎個人理解_閉包