1. 程式人生 > >閉包詳解

閉包詳解

什麼是閉包?

內層函式引用外層函式的變數,並把這個變數封閉到它的函式體內,直到它被呼叫後才釋放,有人說,閉包是內層函式和外層函式溝通的橋樑

還是不夠明白?讓我們通過程式碼說明.

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
版權宣告:本文為博主原創文章,轉載請附上博文連結!