装饰器
装饰器原理
import time # # time.sleep(2) #让程序执行到这个位置时停一会 # print('2 sec') # # print(time.time()) #从1970年至现在的秒数 # # def func(): # start = time.time() #获取当前时间 # print("hello") # time.sleep(0.01) # end = time.time() #获取完成后的时间 # print(end - start) # # func() # # def timmer(f): # start = time.time() # f() # end = time.time() # print(end - start) # # timmer(func) #不修改函数的调用方式,在原函数的前后添加功能 def func(): #原函数功能 time.sleep(0.01) print("函数体") def timmer(f): #在原函数功能基础上,增加了功能,是装饰器函数 def inner(): start = time.time() f() #被装饰得函数 end = time.time() print(end - start) return inner func = timmer(func) #用相同的名字调用原函数 func() #原则:开放封闭原则 #开放 对扩展是开放的 #封闭 对修改是封闭的
普通装饰器写法
import time def timmer(f): #在原函数功能基础上,增加了功能,是装饰器函数 def inner(): start = time.time() ret = f() #被装饰得函数 end = time.time() print(end - start) return ret return inner @timmer #语法糖:@装饰器函数名 def func(): #被装饰的函数 time.sleep(0.01) print("函数体") return("返回值") # func = timmer(func) #用相同的名字调用原函数 ret = func() print(ret)
带参数和返回值的装饰器
#装饰带参数函数的装饰器 import time 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): #被装饰的函数 time.sleep(0.01) print("函数体", a) return("返回值") # func = timmer(func) #用相同的名字调用原函数 ret = func('传参') print(ret)
装饰器的固定模式
#装饰器的固定模式 def wrapper(f): def inner(*args, **kwargs): #被装饰函数之前执行的代码 ret = f(*args, **kwargs) #被装饰函数之后执行的代码 return ret return inner @wrapper def func(a, b): print("原函数功能", a, b) return '返回值'

浙公网安备 33010602011771号