刚开始接触装饰器这个概念
在我的概念里面, 装饰器就是在函数外面再包了一层的语法糖, 可以在函数的执行前和执行后的部分添加功能,
比如 我要在函数前后,打开/关闭数据库的连接, 写入日志, 预处理等等,
这时候使用装饰器可以简化代码量,提高复用效率,
看一个简单的装饰器:
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:调用函数后