文件名称:定义一个带参数的装饰器-华为云大数据中台架构分享
文件大小:5.68MB
文件格式:PDF
更新时间:2024-07-01 05:00:43
Python cookbook 中文 参考
9.4 定义一个带参数的装饰器 问题 你想定义一个可以接受参数的装饰器 解决方案 我们用一个例子详细阐述下接受参数的处理过程。 假设你想写一个装饰器,给 函数添加日志功能,同时允许用户指定日志的级别和其他的选项。 下面是这个 装饰器的定义和使用示例: from functools import wraps import logging def logged(level, name=None, message=None): """ Add logging to a function. level is the logging level, name is the logger name, and message is the log message. If name and message aren't specified, they default to the function's module and name. """ def decorate(func): 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 return decorate # Example use @logged(logging.DEBUG) def add(x, y):