閉包詳解
阿新 • • 發佈:2018-12-08
什麼是閉包?
內層函式引用外層函式的變數,並把這個變數封閉到它的函式體內,直到它被呼叫後才釋放,有人說,閉包是內層函式和外層函式溝通的橋樑
還是不夠明白?讓我們通過程式碼說明.
def f1():
name='Lily'
def inner():
print(name)
return inner
a=f1()
a()
相應的解釋:
inner()就是這個內部函式,對在外部作用域(但不是在全域性作用域)的變數進行引用:name就是被引用的變數,name在外部作用域f1裡面,但不在全域性作用域裡,則這個內部函式inner就是一個閉包。
再稍微講究一點的解釋是,閉包=函式塊+定義函式時的環境,inner就是函式塊,name就是環境。
進階
def outer(): temp=[] #當執行到下面的for迴圈時, # 首先i=0,接下來執行temp.append(),temp列表的每個元素是inner函式, # 迴圈進行,i執行到9,停止 for i in range(2): def inner(): print(i) temp.append(inner) return temp use_outer=outer() #此時use_outer為temp print(use_outer)#列表 # use_outer[0]()#即temp第一個元素,即inner()函式 for i in use_outer: i()
進階相關練習:
mylist=[lambda:x for x in range(2)]
for i in mylist:
print(i)
print(i())
#輸出結果
<function . at 0x000002387EF14B70>
1
<function . at 0x000002387FF79598>
1
參考:https://blog.csdn.net/marty_fu/article/details/7679297
版權宣告:本文為博主原創文章,轉載請附上博文連結!