什么是装饰器
装饰器是一个有函数作为参数的函数
把执行真正业务逻辑的函数 func 包裹在其中,看起来像 test 被 decorator 装饰了一样
装饰器最常见的用处时保存日志
简单的例子
def decorator(func):
def wrapper(*args, **kwargs):
print('This is a test')
return func(*args, **kwargs)
return wrapper
@decorator
def test():
print('这是一个测试')
test()
运行结果
This is a test
这是一个测试
保存日志的例子
logged作为一个装饰器可以在日志上打印函数名,函数返回值,运行时间等。
使用时注意将loggerName替换为你自己的logger
import logging
from functools import wraps
from datetime import datetime
def logged(level):
def decorate(func):
log = logging.getLogger('loggerName')
@wraps(func)
def wrapper(*args, **kwargs):
start_time = datetime.now()
r = func(*args, **kwargs)
end_time = datetime.now()
log.log(level, [func.__name__, r, (end_time - start_time).total_seconds()])
return r
return wrapper
return decorate
@logged
def test():
print('这是一个测试')