python學習筆記29 閉包基本概念

2022-07-09 07:42:09 字數 1219 閱讀 1591

目錄建立閉包的方法:

定義乙個外函式outer();

outer()中定義乙個臨時變數;

outer()中定義乙個內函式inner();

inner()中使用了outer中的臨時變數;

outer()的返回值是對inner的引用;

這樣就建立了乙個閉包, 閉包的特性見第3節.

def outer():               #1. 定義乙個外函式outer()

_list_tmp = list() #2. outer()中定義乙個臨時變數

def inner(s_new_ele): #3. outer()中定義乙個內函式inner();

print(_list_tmp)

return _list_tmp

return inner #5. outer()的返回值是對inner的引用;

if __name__ == '__main__':

outer_0 = outer() # outer_0中繫結了乙個臨時變數_list_tmp

outer_0('a') # 返回['a']

outer_0('b') # 返回['a', 'b']

outer_1 = outer() # outer_1中繫結了另乙個臨時變數_list_tmp, 與outer_0中的相互獨立

outer_1('x') # 返回['x']

outer_1('y') # 返回['x', 'y']

outer_0('c') # 返回['a', 'b', 'c']

outer_1('z') # 返回['x', 'y', 'z']

從外部讀取函式內部的變數.

將建立的變數始終保持在記憶體中.

封裝物件的私有屬性和私有方法.

一般情況下, 乙個函式執行結束時, 函式內部的臨時變數就銷毀了.

但閉包比較特殊, outer()執行結束後, 由於它的臨時變數用在inner()中, 所以這個臨時變數就繫結給inner()了.

並且, 多次執行outer()函式返回的多inner中的臨時變數是相互獨立的.

裝飾器.

物件導向, 由於臨時變數在inner之間是相互獨立的, 與class有相同的特點, 所以可以使用閉包來實現class(python的class不是用閉包實現的).

實現單例模式.

python學習筆記 閉包

乙個函式a和乙個函式b,其中b函式位於a函式體內部,同時b函式體內呼叫了b函式之外,a函式之內的其他變數x 包括a中傳遞過來的引數 此時,x稱為b函式的環境變數,b函式和變數x就構成了乙個閉包。而函式b是需要返回的,也就是返回函式b,其中在返回的時候,對a引數x的呼叫也包括在了裡面,有點封閉包含的意...

Python學習筆記 閉包

在學習閉包之前,我們先要弄懂一件事兒。同理 test其實就是乙個變數,變數中存放著函式體的位址,就像a變數中存放著100的位址一樣。t test實質上就是淺拷貝行為。將變數test中的位址存放到變數t中 我們如果要呼叫test函式,test 當t獲取了函式體的位址後,同樣可以以t 的形式呼叫函式 注...

Python之閉包學習筆記

走棋子是乙個很好的例子理解為什麼用閉包。資料來自網易雲課堂 假設需求是給定一顆在 0,0 位置的棋子,使用者互動輸入移動方向與步數,寫乙個函式記錄棋子的位置變化。這個函式可以是這樣的 以使用者輸入的方向與步數變數為引數,計算出移動後的位置值作為函式返回值。那麼走第一步時,基於初始位置值 0,0 做計...