python 参数可选的装饰器

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)

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!')

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问题 你想写一个装饰器来包装一个函数,并且允许用户提供参数在运行时控制装饰器行为。 解决方案 引入一个访问函数,使...
    SkTj阅读 429评论 0 1
  • from functools import wrapsimport logging def logged(leve...
    SkTj阅读 476评论 0 2
  • 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,...
    chen_000阅读 1,373评论 0 3
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 2,946评论 0 8
  • 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返...
    萧十一郎456阅读 350评论 0 0