美文网首页
定义一个带参数的装饰器

定义一个带参数的装饰器

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

场景:想定义一个可以接受参数的装饰器。

@decorator(x, y, z)
def func(a, b):
    pass

等价

def func(a, b):
    pass
func = decorator(x, y, z)(func)

假设你想写一个装饰器,给函数添加日志功能,同时允许用户指定日志的级别和其他的选项

from functools import wraps
import logging


def logged(level, name=None):
    """
    Add logging to a function. level is the logging
    level, name is the logger name. If name aren't
    specified, they default to the function's module and name.
    """

    def decorate(func):
        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

    return decorate

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


if __name__ == '__main__':
    delete()
    add(3, 2)
2019-02-19 15:10:27,849 - __main__ - DEBUG - 5

相关文章

  • 定义一个带参数的装饰器

    定义一个带参数的装饰器 问题 你想定义一个可以接受参数的装饰器 解决方案 我们用一个例子详细阐述下接受参数的处理过...

  • Python - 学习理解带参数的装饰器

    理解带参数的装饰器 参考文章 Python精进-装饰器与函数对象 加了装饰器这段代码从一个函数定义(不会执行任何东...

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

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

  • Python中的装饰器

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

  • 装饰器

    代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator) 装饰器的定义及使用 带参数的装饰器函数及使...

  • Python | 装饰器

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

  • python装饰器

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

  • 装饰器

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

  • 装饰器的使用

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

  • 定义一个带参数的装饰器

    场景:想定义一个可以接受参数的装饰器。 等价 假设你想写一个装饰器,给函数添加日志功能,同时允许用户指定日志的级别...

网友评论

      本文标题:定义一个带参数的装饰器

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