• python3 开发面试题(装饰器必须考)6.4


    def f():
        print("2018-06-04")
    
    # 每次调用f的时候 在打印"2018-06-04" 之前打印一句 开始, 之后再打印一句 结束  
    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
    '''
  • 相关阅读:
    Git with SVN 协同设定
    Apache+Django+mod_wsgi安装目录
    ROR study
    PHP框架
    Gerrit 配置
    Garmin、任我游品牌自制等高线方法比较
    使用python发送outlook约会提醒邮件
    Apache部署多个django site project
    Aptana Studio 3安装(Windows)
    The Art of Readable Code
  • 原文地址:https://www.cnblogs.com/ManyQian/p/9133309.html
Copyright © 2020-2023  润新知