函数的元数据包括哪些呢?
1. 函数名 .__name__
2. 函数注释 .__doc__
...
那,如何保留被装饰函数元数据,通过wraps装饰器保留被装饰函数的元数据
import time
from functools import wraps
def get_run_time(func):
# 通过 wraps保留原函数的元数据
@wraps(func)
def wrapper(*args, **kwargs):
r = func(*args, **kwargs)
# 输出函数元数据
print(func.__name__)
print(func.__doc__)
return r
return wrapper
@get_run_time
def bei_men_chui_xue(name):
"""北门吹雪"""
time.sleep(1)
return "Hai, %s" % name
# 获取返回值
r = bei_men_chui_xue("北门吹雪")
print(r)
经验:
1. 直接使用装饰器将会丢失被装饰函数的元数据,不想获取被装饰函数元数据则不关心,直接使用装饰器
2. 想要获取被装饰函数元数据则需要通过另外的装饰器 @wraps装饰元函数获取被装函数元数据