import time def timmer(f): #装饰器函数 def inner(): start = time.time() ret = f() #被装饰的函数 end = time.time() print(end-start) return ret return inner @timmer #魔法糖 @装饰器函数名 ====>func = timmer(func) def func(): #被装饰的函数 time.sleep(0.01) print('hahaha') return 'good st' # func = timmer(func) ret = func() print(ret)
#不想修改函数的调用方式,但是还想在原来的函数前后添加功能
#timmer就是一个装饰器函数,只对一个函数有一些装饰作用
#原则: 开放封闭原则
#开放 :对扩展是开放的
#封闭 :对修改是封闭的
#装饰带参数函数的装饰器
def timmer(f): #装饰器函数 def inner(a): start = time.time() ret = f(a) #被装饰的函数 end = time.time() print(end-start) return ret return inner @timmer #魔法糖 @装饰器函数名 def func(a): #被装饰的函数 time.sleep(0.01) print('hahaha',a) return 'good st' # func = timmer(func) ret = func(1) print(ret)
多参数
def timmer(f): #装饰器函数 def inner(*args,**kwargs): start = time.time() ret = f(*args,**kwargs) #被装饰的函数 end = time.time() print(end - start) return ret return inner @timmer #魔法糖 @装饰器函数名 def func(a,b): #被装饰的函数 time.sleep(0.01) print('hahaha',a,b) return 'good st' @timmer #魔法糖 @装饰器函数名 def func1(a): #被装饰的函数 time.sleep(0.01) print('hahaha',a) return 'good st' # func = timmer(func) ret = func(1,2) ret = func(1,b=2) print(ret)
装饰器定式
def wapper(f): #装饰器函数 f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事''' ret = f(*args,**kwargs) #被装饰的函数 '''在被装饰函数之后要做的事''' return ret return inner @wapperr #魔法糖 @装饰器函数名 def func(a,b): #被装饰的函数 time.sleep(0.01) print('hahaha',a,b) return 'good st'