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