美文网首页
带可选参数的装饰器

带可选参数的装饰器

作者: noteby | 来源:发表于2019-02-19 17:41 被阅读0次

场景:想写一个装饰器,既可以不传参数给它,比如 @decorator , 也可以传递可选参数给它,比如 @decorator(x,y,z) 。

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)

    logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    log_name = name if name else func.__module__
    log = logging.getLogger(log_name)

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

    return wrapper


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


@logged(level=logging.CRITICAL, name='example')
def delete():
    return 'delete success'


if __name__ == '__main__':
    add(3, 3)
    delete()

相关文章

  • 带可选参数的装饰器

    场景:想写一个装饰器,既可以不传参数给它,比如 @decorator , 也可以传递可选参数给它,比如 @deco...

  • Python中的装饰器

    Python中的装饰器 不带参数的装饰器 带参数的装饰器 类装饰器 functools.wraps 使用装饰器极大...

  • Python | 装饰器

    使用场景 装饰器 ' @ ' 使用 带参数装饰器 装饰器类

  • python装饰器

    1.装饰器 2.带装饰器的参数

  • 装饰器

    """@装饰器- 普通装饰器- 带参数的装饰器- 通用装饰器- 装饰器装饰类- 内置装饰器- 缓存装饰器- 类实现...

  • 装饰器的使用

    函数带多个参数 普通的装饰器, 打印函数的运行时间 装饰器带有多个参数当装饰器带有多个参数的时候, 装饰器函数就需...

  • Python装饰器, since 2022-02-10

    (2022.02.24 Thur 难点和问题:装饰器参数和可选参数,其中_func的作用;@functools.w...

  • 14.python装饰器进阶之参数与返回值

    一、带一个参数的装饰器 上一节我们讨论的装饰器都是装饰不带参数的函数,现在要装饰一个带参数的函数怎么办呢? 二、带...

  • 装饰器

    装饰器 decorator类装饰器 带参数的装饰器 举例(装饰器函数;装饰器类;有参与无参) https://fo...

  • Python进阶 装饰器

    一切皆对象 原始的装饰器 使用@的装饰器 蓝本规范 带参数的装饰器 装饰器类

网友评论

      本文标题:带可选参数的装饰器

      本文链接:https://www.haomeiwen.com/subject/kcsfyqtx.html