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