装饰器
import time def timmer(func): #函数名可以当做函数的参数 def inner(): start = time.time() func() end = time.time() print(end - start) return inner def hahaha(): time.sleep(0.1) print('aaaa') #hahaha() # timmer(hahaha) #我们不能修改这个函数的调用方式 #也不能修改原代码 # hahaha = timmer(hahaha) #timmer函数的地址给了hahaha # hahaha() #实际上执行的是timmer import time def timmer(func): #函数名可以当做函数的参数 def inner(): start = time.time() func() end = time.time() print(end - start) return inner def hahaha(): time.sleep(0.1) print('aaaa') # hahaha = timmer(hahaha) #timmer函数的地址给了hahaha # hahaha() # def timmer(func): #---> hahaha # def inner(x,y): # func(x,y) # --->hahaha # return inner # # def hahaha(a,b): # time.sleep(0.1) # print(a,b) # # hahaha = timmer(hahaha) # #我们不能修改这个函数的调用方式 # hahaha(1,2) #==>inner(1,2) def timmer(func): #---> hahaha def inner(x,y): func(x,y) # --->hahaha return inner def hahaha(a,b): time.sleep(0.1) print(a,b) def kkk(a): print(a) # hahaha = timmer(hahaha) # hahaha(1,2) #inner(1,2) def timmer(func): #---> hahaha def inner(*args,**kwargs): #args == (1,2) kwargs == {} #*args == 1,2 **kwargs == a =1,b = 2 func(*args,**kwargs) # --->hahaha return inner def kkk(a): print(a) kkk = timmer(kkk) # kkk(1) def timmer(func): #---> jjj def inner(*args,**kwargs): ret = func(*args,**kwargs) # --->ret = jjj() return ret return inner @timmer #jjj = timmer(jjj) 语法糖 def jjj(): return 123 # jjj = timmer(jjj) ret = jjj() #==>inner #装饰器的本质 :闭包函数 #功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 def timmer(func): def inner(*args,**kwargs): '''添加函数调用之前的扩展代码''' ret = func(*args,**kwargs) '''添加函数调用之后的扩展代码''' return ret return inner #设计模式 原则 开放封闭原则 #对扩展是开放的 #对修改是封闭的 def wrapper(func):#装饰 def inner(*args,**kwargs): ret = func(*args,**kwargs) return ret return inner @wrapper def aaa(): print('asghksdlhf') @wrapper def bbb(): print('asghksdlhf') # aaa() # bbb() # aaa() # bbb() import time def wrapper(func): # 装饰 def inner(*args, **kwargs): start = time.time() ret = func(*args, **kwargs) end = time.time() print(end - start) return ret return inner @wrapper def lll(): time.sleep(0.1) print('hello') lll()