裝飾器本質(zhì)上就是一個(gè)python函數(shù),他可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下稚虎,增加額外的功能撤嫩,裝飾器的返回值也是一個(gè)函數(shù)對象。
裝飾器的應(yīng)用場景:比如插入日志蠢终,性能測試序攘,事務(wù)處理,緩存等等場景寻拂。
完整示例
import time
def timer(func):
def inner(*args,**kwargs):
start = time.time()
re = func(*args,**kwargs)
print(time.time() - start)
return re
return inner
@timer #==> func1 = timer(func1)
def func1(a,b):
print('in func1')
@timer #==> func2 = timer(func2)
def func2(a):
print('in func2 and get a:%s'%(a))
return 'fun2 over'
func1('aaaaaa','bbbbbb')
print(func2('aaaaaa'))
解決查看函數(shù)信息的方法失效的問題
from functools import wraps
def deco(func):
@wraps(func) #加在最內(nèi)層函數(shù)正上方
def wrapper(*args,**kwargs):
return func(*args,**kwargs)
return wrapper
@deco
def index():
'''哈哈哈哈'''
print('from index')
print(index.__doc__)
print(index.__name__)