装饰器
一、函数的有用信息
# from functools import wraps # def wrapper(f): # f = func1 # @wraps(f) # def inner(*args,**kwargs): #聚合 # #args (1,2,3) # '''执行函数之前的相关操作''' # ret = f(*args,**kwargs) # 打散 1,2,3 # '''执行函数之后的相关操作''' # return ret # return inner # # # # # 函数的执行时,*打散。 # # # 函数的定义时,*聚合。 # # @wrapper # func1 = wrapper(func1) func1 = inner # # def func1(*args): #args (1,2,3) # # print(666) # # return args # # print(func1(*[1,2,3])) # inner(3,5) 打散 # # # # def func1(): # # """ # # 此函数是完成登陆的功能,参数分别是...作用。 # # :return: 返回值是登陆成功与否(True,False) # # """ # # print(666) # # # print(func1.__name__) # # # print(func1.__doc__) # # return True # # func1() # # print(func1.__name__) # # print(func1.__doc__) # @wrapper # def func1(): # """ # 此函数是完成登陆的功能,参数分别是...作用。 # :return: 返回值是登陆成功与否(True,False) # """ # print(666) # return True # func1() # print(func1.__name__) # print(func1.__doc__)
二、带参数的装饰器
import time def timmer(*args,**kwargs): def wrapper(f): def inner(*args,**kwargs): if flag: start_time = time.time() ret = f(*args,**kwargs) time.sleep(0.3) end_time = time.time() print('此函数的执行效率%f' % (end_time-start_time)) else: ret = f(*args, **kwargs) return ret return inner return wrapper flag = True @timmer(flag,2,3) # 两步:1,timmer(flag) --> wrapper 2,@wrapper 装饰器 def func1(): print(666) @timmer(flag) def func2(): print(777) # func1() # func2() # import time # flag = True # def wrapper(f): # def inner(*args,**kwargs): # if flag: # start_time = time.time() # ret = f(*args,**kwargs) # time.sleep(0.3) # end_time = time.time() # print('此函数的执行效率%f' % (end_time-start_time)) # else: # ret = f(*args, **kwargs) # return ret # return inner
三、多个装饰器装饰一个函数
def wrapper1(func): # func == f函数名 def inner1(): print('wrapper1 ,before func') # 2 func() print('wrapper1 ,after func') # 4 return inner1 def wrapper2(func): # func == inner1 def inner2(): print('wrapper2 ,before func') # 1 func() print('wrapper2 ,after func') # 5 return inner2 # @wrapper3 # @wrapper2 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2 # @wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1 # def f(): # 3 # print('in f') # # f() # inner2() # @wrapper2 # @wrapper3 # f = wrapper2(f) 里面的f==inner1 外面的f == inner2 # @wrapper1 # f = wrapper1(f) 里面的f==函数名f 外面的f == inner1 # def f(): # 3 # print('in f') # # f() #