美文网首页
装饰器入门(1)

装饰器入门(1)

作者: leoni999 | 来源:发表于2017-06-26 15:25 被阅读0次

    刚开始接触装饰器这个概念

    在我的概念里面, 装饰器就是在函数外面再包了一层的语法糖, 可以在函数的执行前和执行后的部分添加功能,

    比如 我要在函数前后,打开/关闭数据库的连接, 写入日志, 预处理等等,

    这时候使用装饰器可以简化代码量,提高复用效率,

    看一个简单的装饰器:

    import logging
    def log(func):
        def wrapper(*args, **kw):
            logging.warning("调用函数前")
            func(*args, **kw)
            logging.warning("调用函数后")
        return wrapper
    
    @log
    def now():
        print ('2017/6/26')
        return ('return result')
    
    now()
    
    

    输出:

    WARNING:root:调用函数前
    2017/6/26
    WARNING:root:调用函数后
    

    这个装饰器就是一个以函数为参数的函数而已。
    这时候now() 就相当于 log(now)()。

    这就是最简单的在函数调用前后 输出日志。
    如果想要获取函数返回结果怎么办?
    只需要简单地修改wrapper函数

    def log(func):
        def wrapper(*args, **kw):
            logging.warning("调用函数前")
            t = func(*args, **kw)
            logging.warning("调用函数后")
            return t
        return wrapper
    
    print(now())
    

    输出:

    2017/6/26
    return result
    WARNING:root:调用函数前
    WARNING:root:调用函数后
    

    相关文章

      网友评论

          本文标题:装饰器入门(1)

          本文链接:https://www.haomeiwen.com/subject/incjcxtx.html