函数的有用信息
获取有用信息
from functools import wraps 调用
__name__ 显示函数名
__doc__ 显示函数的有用信息
from functools import wraps def wrapper(f): @wraps(f) def inner(*args, **kwargs): """执行函数之前的操作""" ret = f(*args, **kwargs) """执行函数之后的操作""" return ret return inner @wrapper def login(username, password): """ 此函数需要用户名,密码两个参数,完成的是登录的功能。 :return: True 登录成功。 False登录失败。 """ a = 2 c = 4 print('登录成功...') return True print(login.__name__) print(login.__doc__)
带参数的装饰器
import time def timer_out(flag1): #falg1 = flag def timer(f): def inner(*args, **kwargs): if flag1: start_time = time.time() time.sleep(0.3) ret = f(*args, **kwargs) end_time = time.time() print('执行效率%s' % (end_time-start_time)) return ret else: ret = f(*args, **kwargs) return ret return inner return timer flag = False @timer_out(flag) # 1,步 timer_out(flag) == timer 2,@与timer结合,变成你熟悉的装饰器 @timer def func1(): print(111) @timer_out(flag) def func2(): print(222) @timer_out(flag) def func3(): print(333) func1() func2() func3()
多个装饰器装饰一个函数
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() # inner1() print('wrapper2 ,after func') # 5 return inner2 @wrapper2 # f = wrapper2(f) 里面的f新变量 = inner1 外面的f最新变量 = inner2 @wrapper1 # f = wrapper1(f) 里面的f函数名 外面的f新变量=inner1 def f(): print('in f') # 3