美文网首页
调用语法糖中带有参数的装饰器

调用语法糖中带有参数的装饰器

作者: 猪儿打滚 | 来源:发表于2020-11-09 17:20 被阅读0次

前言

有时候我们会使用到这种装饰器,比如:@logging(level="debug")。那么,这种装饰器是如何实现的呢?

代码例子

  • 原本外层函数接收的func,改成接收语法糖的参数
  • 添加一层内嵌函数,用来接收func
import logging

logging.basicConfig(format='%(asctime)s - %(levelname)s: %(message)s',
                    level=logging.DEBUG)


def use_logging(level):  # 原本外层函数接收的func,改成接收语法糖的参数
    
    def decorator(func):# 添加一层内嵌函数,用来接收func

        def wrapper(*args, **kwargs):
            if level == "debug":
                logging.debug(F"{func.__name__}的报错是debug级别")
            elif level == "warn":
                logging.warning(F"{func.__name__}的报错是warn级别")
            return func(*args, **kwargs)

        return wrapper

    return decorator


@use_logging(level="debug") # 带有参数
def test_debug():
    print("debug级别报错的函数")


@use_logging(level="warn" ) # 带有参数
def test_warn():
    print("warn级别报错的函数")


if __name__ == '__main__':
    test_debug()
    test_warn()
  • 结果


    结果

相关文章

网友评论

      本文标题:调用语法糖中带有参数的装饰器

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