Python函數閉包


所謂的函數閉包本質是函數的嵌套和高階函數。我們來看看要實現函數閉包要滿足什么條件(缺一不可):

1)必須嵌套函數
2)內嵌函數必須引用一個定義在閉合范圍內(外部函數里)的變量——內部函數引用外部變量
3)外部函數必須返回內嵌函數——必須返回那個內部函數

閉包的作用:可以保持程序上一次運行后的狀態然后繼續執行。

我們來看一閉包函數的一個實例

def foo():
    num=1
    def add(n):
        nonlocal  num
        num += n
        return num
    return add
f=foo()
print(f(1))  #2
print(f(2))  #4

我們可以用函數閉包來實現一個函數的裝飾器:

我們知道函數裝飾器要滿足如下條件:1、不能改變原來函數的代碼。2、為函數添加新的功能。3、不能改變函數的調用方式。 使用函數閉包完全可以做到這一點。

下面我們的為一個函數,增加統計時間的功能:

import  time
def foo():
    time.sleep(3)
    print('aaa')
def decorate(fun):
    def bibao():
        start=time.time()
        fun()
        end=time.time()
        print('花費的時間是%d'%(end-start))
    return bibao
foo=decorate(foo)
foo()    
#aaa
花費的時間是3

 


免責聲明!

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



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