函数的元数据信息丢了
doc: 文档说明,用来功能描述r
annotations: 类型标注,是个json格式,用来存储变量/参数/返回值的类型标记
@timecount def autodown(n: int) ->str: ''' some docs ''' while n > 0: n -= 1 print(autodown.__name__) wrapper print(autodown.__doc__) ''' some docs '''
print(autodown.__annotations__) {'n': int, 'return': int}
必须要将被装饰函数的元数据保留下来。可以使用functools模块中的wraps()装饰一下装饰器中的wrapper()函数
import time from functools import wraps def timecount(func): @wraps(func) def wrapper(*args, **kwargs): start = time.time() result = func(*args, **kwargs) end = time.time() print(func.__name__, end - start) return result return wrapper