装饰器入门(1)

2017-06-26  本文已影响0人  leoni999

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

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

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

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

看一个简单的装饰器:

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:调用函数后
上一篇下一篇

猜你喜欢

热点阅读