Python - 确保修饰函数保留元数据
Python - ensuring decorated function keeps metadata
能否请您告诉我装饰函数是否可以保留其元数据?
这将是装饰器的代码:
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__)
如果我需要提供更多详细信息,请告诉我。
谢谢
使用 functools
模块中的 wraps
函数来保留签名。 :
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
能否请您告诉我装饰函数是否可以保留其元数据? 这将是装饰器的代码:
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__)
如果我需要提供更多详细信息,请告诉我。
谢谢
使用 functools
模块中的 wraps
函数来保留签名。 :
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