day11 装饰器一
一、装饰器的形成
import time
# print(time.time()) # 获取当前时间
# time.sleep(10) #让程序在执行到这个位置的时候停一会儿
# 法一 def func(): time.sleep(0.01) print('mr.king') def timmer(f): #timmer是装饰器函数 def inner(): start = time.time() f() #f为被装饰的函数 end = time.time() print(end - start) return inner func = timmer(func) func() # 法二 def func(): time.sleep(0.01) print('mr.king') def timmer(f): start = time.time() f() end = time.time() print(end - start) timmer(func)
语法糖
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() #inner() print(ret)
二、装饰器的作用
# 装饰器的作用 —— 不想修改函数的调用方式 但是还想在原来的函数前后添加功能
# timmer就是一个装饰器函数,只是对一个函数 有一些装饰作用
#装饰带参数函数的装饰器
from functools import wraps def timmer(f): #装饰器函数
@wraps(func) #完美的装饰器 def inner(*args,**kwargs): #(1,2) /(1) start = time.time() ret = f(*args,**kwargs) #f(1,2) #被装饰的函数 end = time.time() print(end - start) return ret return inner @timmer #语法糖 @装饰器函数名 def func(a,b): #被装饰的函数 time.sleep(0.01) print('老板好同事好大家好',a,b) return '新年好' @timmer #语法糖 @装饰器函数名 def func1(a): #被装饰的函数 time.sleep(0.01) print('老板好同事好大家好',a) return '新年好' # func = timmer(func) ret = func(1,2) #inner() ret = func(1,b = 2) #inner() print(ret)
三、原则:开放封闭原则
# 开放 : 对扩展是开放的
# 封闭 : 对修改是封闭的
四、装饰器的固定模式
def wrapper(f): #装饰器函数,f是被装饰的函数 def inner(*args,**kwargs): '''在被装饰函数之前要做的事''' ret = f(*args,**kwargs) #被装饰的函数 '''在被装饰函数之后要做的事''' return ret return inner @wrapper #语法糖 @装饰器函数名 def func(a,b): #被装饰的函数 time.sleep(0.01) print('老板好同事好大家好',a,b) return '新年好'
def wrapper(func): #qqxing def inner(*args,**kwargs): ret = func(*args,**kwargs) #被装饰的函数 return ret return inner @wrapper #qqxing = wrapper(qqxing) def qqxing(): print(123) ret = qqxing() #inner


浙公网安备 33010602011771号