python中閉包的理解


閉包的三個條件:

1、函數(外函數)中定義了內函數;2、內函數使用了外函數的非全局變量;3、外函數最終返回的是內函數的引用。

簡單閉包事例:

#outerfunc為外函數
def outerfunc(x):
    y = 10     #x,y都是外函數的非全局變量

    #innerfunc是內函數
    def innerfunc():

        #內函數使用了外函數的非全局變量
        return x * y

    #外函數最終返回的是內函數的引用
    return innerfunc

然后執行如下代碼:

func = outerfunc(2)

func()

輸出 20

 

因為外函數最終返回的是內函數的引用,所以變量func為內函數innerfunc的引用,

func(),變量后面加了括號,則是執行內函數,所以最終結果為20。

 

再看下面的例子:

def outerfunc(x):

    def innerfunc(y):

        return x * y

    return innerfunc




func = outerfunc(2)
print(func(3))
print(func(4))

輸出結果分別為6和8

print(func(3)):因為func是內函數的引用,參數2是外函數的變量,被內函數使用,而func(3)執行的是內函數,3是傳給內函數的參數,所以結果為6

print(func(4))也是同樣的道理。

 

上面的代碼改下,如下:

def outerfunc(x):

    def innerfunc(y):

        return x

    return innerfunc




func = outerfunc(2)
print(func(3))
print(func(30))

上面輸出都是2

因為內函數只用到了外函數的變量

 

以上是本人的理解,有誤望諒解,歡迎指正。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM