import timedef timer(f): # 这是一个装饰器函数 def inner(): start = time.time() f() # 被装饰的函数 end = time.time() print('函数执行了%d秒' %(end-start) ) return inner@timer # 语法糖 @装饰器函数名def func(): # 被装饰的函数 time.sleep(3) print('这是一个函数执行的内容')func()
装饰带参数函数的装饰器
import timedef timer(f): # 这是一个装饰器函数 def inner(*args,**kwargs): start = time.time() ret = f(*args,**kwargs) # *args,表示打散元组中每个元素传递 end = time.time() print('函数执行了%s秒' %(end-start) ) return ret return inner# 两个参数传递,按位置传递参数方式 *args就可以解决@timer # 语法糖 @装饰器函数名def func(a,b): # 被装饰的函数 time.sleep(0.02) print('同志们',a,b) return '新年好'# 一个位置参数,*args就能传递@timer # 语法糖 @装饰器函数名def func1(a): # 被装饰的函数 time.sleep(0.02) print('同志们',a) return '新年好'# 如果赋值传递则需要**kwargs来解决@timer # 语法糖 @装饰器函数名def func2(a,b=2): # 被装饰的函数 time.sleep(0.02) print('同志们',a,b) return '新年好'ret = func(1,2)ret1 = func1(1)ret2 = func2(1)print(ret,ret1,ret2)
装饰器的固定格式
def wrapper(f): # 这是一个装饰器函数 def inner(*args,**kwargs): ret = f(*args,**kwargs) # *args,**kwargs表示打散元组中每个元素传递 return ret return inner@wrapperdef func(a,b): # 被装饰的函数,可以传递参数 print('这是函数主体',a,b)ret = func(1,2) # 这里执行的是inner