python 参数可选的装饰器

2019-12-12 18:03:44 浏览数 (1)

from functools import wraps, partial import logging

def logged(func=None, *, level=logging.DEBUG, name=None, message=None): if func is None: return partial(logged, level=level, name=name, message=message)

代码语言:javascript复制
logname = name if name else func.__module__
log = logging.getLogger(logname)
logmsg = message if message else func.__name__

@wraps(func)
def wrapper(*args, **kwargs):
    log.log(level, logmsg)
    return func(*args, **kwargs)

return wrapper

Example use

@logged def add(x, y): return x y

@logged(level=logging.CRITICAL, name='example') def spam(): print('Spam!')

0 人点赞