day 12 带参数的装饰器
函数的有用信息
1 from functools import wraps 2 def wrapper(f): 3 def innner(*args,**kwargs): 4 '''执行函数前的的相关操作''' 5 ret = f(*args,**kwargs) 6 '''执行函数后的相关操作''' 7 return ret 8 return inner 9 10 11 def func1(): 12 ''' 13 此函数是完成登录的功能,参数分别是...作用。 14 :return:返回值是登录成功与否(True,False) 15 ''' 16 print(666) 17 print(func1._name_) 18 print(func1._doc_) 19 return True 20 21 22 func1() 23 print(func1._name_) 24 print(func1._doc_)
带参数的装饰器
可以通过装饰器带参数达到想要的传参
1 import time 2 def timmer(*args,**kwargs): 3 def wrapper(f): 4 def inner(*args,**kwargs): 5 if flag: 6 start_time = time.time() 7 ret = f(*args,**kwargs) 8 time.sleep(0.3) 9 end_time = time.time() 10 print('此函数的执行效率%f' % (end_time-start_time)) 11 else: 12 ret = f(*args, **kwargs) 13 return ret 14 return inner 15 return wrapper 16 17 flag = True 18 @timmer(flag,2,3) # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器 19 def func1(): 20 print(666) 21 22 23 @timmer(flag) 24 def func2(): 25 print(777) 26 # func1() 27 # func2() 28 29 # import time 30 # flag = True 31 # def wrapper(f): 32 # def inner(*args,**kwargs): 33 # if flag: 34 # start_time = time.time() 35 # ret = f(*args,**kwargs) 36 # time.sleep(0.3) 37 # end_time = time.time() 38 # print('此函数的执行效率%f' % (end_time-start_time)) 39 # else: 40 # ret = f(*args, **kwargs) 41 # return ret 42 # return inner
多个装饰器装饰一个函数
当多个装饰器装饰一个函数的时候,从上至下依次执行各个装饰器被装饰函数执行前的相关操作,等依次执行到被装饰函数,之后执行被装饰函数,后从下向上依次执行每个装饰器被装饰函数执行后相关操作。
1 def wrapper1(func): # func == f函数名 2 def inner1(): 3 print('wrapper1 ,before func') # 2 4 func() 5 print('wrapper1 ,after func') # 4 6 return inner1 7 8 def wrapper2(func): # func == inner1 9 def inner2(): 10 print('wrapper2 ,before func') # 1 11 func() 12 print('wrapper2 ,after func') # 5 13 return inner2 14 # @wrapper3 15 # @wrapper2 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2 16 # @wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1 17 # def f(): # 3 18 # print('in f') 19 # 20 # f() # inner2() 21 22 # @wrapper2 23 # @wrapper3 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2 24 # @wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1 25 # def f(): # 3 26 # print('in f') 27 # 28 # f() #


浙公网安备 33010602011771号