装饰器的一个特性:被装饰函数名字被改变

import time
from functools import wraps
def decorator(func):
    def wrapper():
        print(time.time())
        func()
    return wrapper

@decorator
def f1():
    '''
    This is f1
    '''
    print(f1.__name__)#名字被改变,help()找不出函数说明
f1()

输出:
1583222225.2225788
wrapper

f1这个函数被装饰之后,丢失了自我,连自己的名字都忘了。

print(help(f1))

输出:
Help on function wrapper in module __main__:

wrapper()

None

用help()试着打印文档说明,却已经没有办法挽回了。

可真的没有办法了吗?难道注定就要忘记自己的名字吗?

from functools import wraps
def decorator(func):
    @wraps(func)#加上这行
    def wrapper():
        print(time.time())
        func()
    return wrapper

@decorator
def f1():
    '''
    This is f1
    '''
    print(f1.__name__)#名字被改变,help()找不出函数说明
f1()
print(help(f1))

输出:
1583222549.4283857
f1
Help on function f1 in module __main__:

f1()
    This is f1

None

解决!

time()函数可查阅:https://blog.csdn.net/weixin_45850939/article/details/104513485

发布了55 篇原创文章 · 获赞 36 · 访问量 1569

猜你喜欢

转载自blog.csdn.net/weixin_45850939/article/details/104634476