python @wrap装饰器保留原函数__name__和__doc__属性
不使用@wrap装饰器
def print_log(fn): def wrap(*args, **kwargs): ''' 这是包装函数 :param args: :param kwargs: :return: ''' print("before execute function") result = fn(*args, **kwargs) print("after execute function") return result return wrap @print_log def say_hello(): ''' 这是say hello 函数 :return: ''' print('hello') if __name__ == '__main__': print(say_hello.__name__) print(say_hello.__doc__)

使用@wrap注解
from functools import wraps def print_log(fn): @wraps(fn) def wrap(*args, **kwargs): ''' 这是包装函数 :param args: :param kwargs: :return: ''' print("before execute function") result = fn(*args, **kwargs) print("after execute function") return result return wrap @print_log def say_hello(): ''' 这是say hello 函数 :return: ''' print('hello') if __name__ == '__main__': print(say_hello.__name__) print(say_hello.__doc__)

Please call me JiangYouDang!
浙公网安备 33010602011771号