python - Python - 确保装饰函数保留元数据
问题描述
您能否让我知道装饰函数是否可以保留其元数据?这将是装饰器的代码:
def timer(func):
"""prints how long a function takes to run."""
def wrapper(*args, **kwargs):
t_start = time.time()
result = functionalists(*args, **kwargs)
t_total = time.time() - t_start
print('{} took {}s'.format(functionalists.__name__, t_total))
return result
return wrapper
以下将是装饰功能。
@timer
def sleep_n_seconds(n=10):
"""pause processing for n seconds.
Args:
n (int): The number of seconds to pause for.
"""
time.sleep(n)
当我尝试使用以下代码打印文档字符串时,不会返回元数据。
print(sleep_n_seconds.__doc__)
如果我需要提供更多详细信息,请告诉我。
谢谢
解决方案
使用模块中的wraps
函数functools
来保留签名。:
from functools import wraps
def timer(func):
@wraps(func)
"""prints how long a function takes to run."""
def wrapper(*args, **kwargs):
t_start = time.time()
result = functionalists(*args, **kwargs)
t_total = time.time() - t_start
print('{} took {}s'.format(functionalists.__name__, t_total))
return result
return wrapper
推荐阅读
- php - 如何在for循环中使用uniqid?
- python-3.x - Python3中如何基于unicode码点将汉字写入文件
- php - 在 Bitrix 中,如何在 PHP 中设置列表类型的自定义字段?
- angular - 如何处理打字稿中共享可观察对象中的错误?
- windows - 在 Windows 上运行 Docker 脚本时如何替换“\r”行尾?
- gcc - LTO 和覆盖静态库中的 stdlib 函数
- java - 没有@Provides-annotated 方法就无法提供(Android Kotlin 中的 Dagger 2)
- php - PHP 返回值格式化
- c# - 抓枪在捡起时不会成为我玩家的孩子
- database - Cypress 中与 SQLite 数据库的示例数据库连接