Python 装饰器 wraps保留函数的元信息
【摘要】 环境信息ModelArtsNotebook - pytorch1.4-cuda10.1-cudnn7-ubuntu18.04JupyterLab - Notebook - Conda-python3 装饰器 wraps保留函数的元信息from functools import wrapsdef func_old(f): def inner(*args,**kwargs): ...
环境信息
- ModelArts
- Notebook - pytorch1.4-cuda10.1-cudnn7-ubuntu18.04
- JupyterLab - Notebook - Conda-python3
- Notebook - pytorch1.4-cuda10.1-cudnn7-ubuntu18.04
装饰器 wraps保留函数的元信息
from functools import wraps
def func_old(f):
def inner(*args,**kwargs):
print("start")
f(*args,**kwargs)
print("end")
return inner
def func_new(f):
@wraps(f)
def inner(*args,**kwargs):
print("start")
f(*args,**kwargs)
print("end")
return inner
@func_old
def say_hello():
"""
函数say_hello的说明文档
"""
print("hello")
say_hello()
start
hello
end
# 函数say_hello的元信息放生了改变
help(say_hello)
Help on function inner in module __main__:
inner(*args, **kwargs)
@func_new
def say_world():
"""
函数say_world的说明文档
"""
print("world")
say_world()
start
world
end
# @wraps(f),保留了函数的元信息
help(say_world)
Help on function say_world in module __main__:
say_world()
函数say_world的说明文档
# 解除装饰器 错误示范
say_hello = say_hello.__wrapped__
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-23-f9218f65494a> in <module>
1 # 解除装饰器
----> 2 say_hello = say_hello.__wrapped__
AttributeError: 'function' object has no attribute '__wrapped__'
# 解除装饰器
say_world = say_world.__wrapped__
say_world()
world
help
help(wraps)
Help on function wraps in module functools:
wraps(wrapped, assigned=('__module__', '__name__', '__qualname__', '__doc__', '__annotations__'), updated=('__dict__',))
Decorator factory to apply update_wrapper() to a wrapper function
Returns a decorator that invokes update_wrapper() with the decorated
function as the wrapper argument and the arguments to wraps() as the
remaining arguments. Default arguments are as for update_wrapper().
This is a convenience function to simplify applying partial() to
update_wrapper().
相关链接
备注
- 欢迎各位同学一起来交流学习心得^_^
- 在线课程、沙箱实验、认证、论坛和直播,其中包含了许多优质的内容,推荐了解与学习。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)