裝飾器可以在不修改目標函數代碼的前提下, 在目標函數執行前後增加一些額外功能 例如有一個簡單的函數 想給這個函數增加一個計算用時的功能,那麼可以利用裝飾器 讓該函數使用裝飾器,即在函數的定義的上方添加@函數名,如下,其相當於將func1=outer(func1)寫到後邊的程式中 至於函數外的參數在函 ...
裝飾器可以在不修改目標函數代碼的前提下, 在目標函數執行前後增加一些額外功能
例如有一個簡單的函數
import time
def func1():
print("這是一個簡單的函數")
time.sleep(2)
想給這個函數增加一個計算用時的功能,那麼可以利用裝飾器
讓該函數使用裝飾器,即在函數的定義的上方添加@函數名,如下,其相當於將func1=outer(func1)寫到後邊的程式中
至於函數外的參數在函數中使用的原因是閉包
import time
def outer(f): def inner(): start = time.time() f() end = time.time() print(end-start) return inner @outer#func1=outer(func1) def func1(): print("這是一個簡單的函數") time.sleep(2) func1()
#輸出
這是一個簡單的函數
2.000551223754883
若是一個有參數的函數需要裝飾則
def outer(f): def inner(x,y): start = time.time() f(x,y) end = time.time() print(end-start) return inner @outer#func1=outer(func1) def add(x,y): print(x+y) time.sleep(2) add(1,2)
若想要在裝飾器中加一些其他語句如判斷語句來控制某些功能是否使用
import time def judge(flag=True): def outer(f): def inner(x,y): start = time.time() f(x,y) end = time.time() print(end-start) return inner if flag==True : print("這是一個功能") return outer @judge()#judge()其實相當於outer,除此之外可以在此添加參數 def add(x,y): print(x+y) time.sleep(2) add(1,2)