Python-装饰器中保留被装饰函数元数据

 函数的元数据包括哪些呢?

  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装饰元函数获取被装函数元数据

原文地址:https://www.cnblogs.com/2bjiujiu/p/7291623.html