python3 开发面试题(装饰器必须考)6.4详解编程语言

def f(): 
    print("2018-06-04") 
 
# 每次调用f的时候 在打印"2018-06-04" 之前打印一句 开始, 之后再打印一句 结束  
python3 开发面试题(装饰器必须考)6.4详解编程语言

def wrapper(func): 
    def inner(): 
        print("start") 
        func() 
        print("end") 
    return inner 
 
@wrapper 
def f(): 
    print("2018-06-04")

答案

但这里面还是有缺陷的,原函数如果有功能注释的话,经过装饰器装饰的函数,就看不到原函数的注释,所以我们可以优化一下

from functools import wraps    #优化装饰器的模块 
 
def wrapper(func): 
    @wraps(func)                 #在这里装饰 
    def inner(*args, **kwargs):  #有参数的情况 
        print("start") 
        ret = func(*args, **kwargs) 
        print("end") 
        return ret            #有返回值的情况下 
    return inner 
 
@wrapper 
def f(*args, **kwargs):   #有参数的情况下 
    """ 
    这是一个测试装饰器的函数,没什么其他的用法 
    :param args: 
    :param kwargs: 
    :return: 
    """ 
    print("2018-06-04") 
 
f()  # inner() 
print(f.__doc__) 
print(f.__name__) 
 
''' 
start 
2018-06-04 
end 
 
    这是一个测试装饰器的函数,没什么其他的用法 
    :param args: 
    :param kwargs: 
    :return: 
     
f 
'''

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12207.html

(0)
上一篇 2021年7月19日 14:27
下一篇 2021年7月19日 14:27

相关推荐

发表回复

登录后才能评论