前言
有时候我们会使用到这种装饰器,比如:@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()
-
结果
结果
网友评论