最全面的Python装饰器教程了( 三 )

这个有什么用呢?比如日志功能,需要打印出谁在什么时间,调用了什么函数,函数是干啥的,花费了多次时间,这个时候,就需要获取函数的有用信息了
带装饰器的函数
def wrapper(f): # f = func1 def inner(*args,**kwargs): #聚合, args (1,2,3) '''执行函数之前的相关操作''' ret = f(*args,**kwargs) # 打散 1,2,3 '''执行函数之后的相关操作''' return ret return inner@wrapperdef func1(): """ 此函数是完成登陆的功能,参数分别是...作用 。return: 返回值是登陆成功与否(True,False) """ print(666) return Truefunc1()print(func1.__name__)print(func1.__doc__) 执行输出:666inner执行函数之前的相关操作函数装饰之后,相当于执行了inner函数,所以输出inner
为了解决这个问题,需要 调用一个模块wraps
wraps将 被修饰的函数(wrapped) 的一些属性值赋值给修饰器函数(wrapper) ,最终让属性的显示更符合我们的直觉
from functools import wrapsdef wrapper(f): # f = func1 @wraps(f) #f是被装饰的函数 def inner(*args,**kwargs): #聚合args (1,2,3) '''执行函数之前的相关操作''' ret = f(*args,**kwargs) # 打散 1,2,3 '''执行函数之后的相关操作''' return ret return inner@wrapperdef func1(): """ 此函数是完成登陆的功能,参数分别是...作用 。return: 返回值是登陆成功与否(True,False) """ print(666) return Truefunc1()print(func1.__name__)print(func1.__doc__) 执行输出:666func1此函数是完成登陆的功能,参数分别是...作用 。return: 返回值是登陆成功与否(True,False)



推荐阅读