當有多個函數(shù)需要擁有相同功能時,裝飾器就起到很大作用,在不改變原有函數(shù)代碼時,用裝飾器給函數(shù)增加一個小功能很是方便。
譬如我現(xiàn)在有幾個函數(shù),我想知道它們的執(zhí)行時間,那么我可以寫一個裝飾器來實現(xiàn)。
def count_time(func):
def int_time(*args,**kwargs):
start_time = datetime.datetime.now() #程序開始時間
func(*args,**kwargs)
over_time = datetime.datetime.now() #程序結束時間
total_time = (over_time-start_time).total_seconds()
print('%s executed in %s seconds' %(func.__name__,total_time))
return int_time
這里使用args和kwargs允許我們在函數(shù)中傳遞多個參數(shù)
我希望計算幾個數(shù)的加減乘除,定義不同的函數(shù)
def func1(x,y):
time.sleep(2.5)
return x + y
def func2(x,y,z):
time.sleep(2.5)
return x*y*z
用@符號調用裝飾器
下面給出完整代碼
import datetime,functools,time
def count_time(func):
def int_time(*args,**kwargs):
start_time = datetime.datetime.now() #程序開始時間
func(*args,**kwargs)
over_time = datetime.datetime.now() #程序結束時間
total_time = (over_time-start_time).total_seconds()
print('%s executed in %s seconds' %(func.__name__,total_time))
return int_time
@count_time
def func1(x,y):
time.sleep(2.5)
return x + y
@count_time
def func2(x,y,z):
time.sleep(2.5)
return x*y*z
func1(2,5)
func2(4,6,3)
運行結果

使用這個裝飾器相當于
func=count_time(func),int_time作為返回值賦值給func