推荐答案
-- -------------------- ---- ------- ------ --------- ------ ------- - ------ --------------------------------------- ------------------- - -------- - ------------- - ------------- --- -------------------- ---------------------- --- -------------- ---------- ----------------------- --------------- ------- ---- ----- ------- ------- ---------- ------ - ----------- --------- ----------------------- --------------- -------- ---- ------- ---------- ------ ------ ------ ------- - ----- -------------- --- ------ --- ------ - - - - -- ------ --
本题详细解读
1. 装饰器的作用
装饰器是Python中一种强大的工具,用于修改或扩展函数的行为。通过装饰器,我们可以在不修改原函数代码的情况下,为函数添加额外的功能,例如日志记录、性能测试、权限校验等。
2. 日志记录装饰器的实现
在上述代码中,我们定义了一个名为log_decorator
的装饰器。这个装饰器的作用是在函数执行前后记录日志。
functools.wraps(func)
: 这个装饰器用于保留原函数的元信息(如函数名、文档字符串等),避免在使用装饰器后丢失这些信息。wrapper(*args, **kwargs)
: 这是装饰器的内部函数,它接收任意数量的位置参数和关键字参数。在这个函数中,我们首先记录函数开始执行的日志,然后调用原函数并记录其返回值,最后返回原函数的结果。
3. 日志配置
我们使用logging.basicConfig
来配置日志记录的基本设置:
level=logging.INFO
: 设置日志级别为INFO
,这意味着只有INFO
级别及以上的日志会被记录。format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
: 设置日志的格式,包括时间、日志名称、日志级别和日志消息。
4. 使用装饰器
通过在函数定义前添加@log_decorator
,我们将log_decorator
装饰器应用到add
函数上。这样,每次调用add
函数时,都会自动记录日志。
5. 测试
调用add(3, 5)
时,日志记录器会输出类似以下的日志:
2023-10-01 12:00:00,000 - root - INFO - Function add started with args: (3, 5), kwargs: {} 2023-10-01 12:00:00,001 - root - INFO - Function add finished with result: 8
通过这种方式,我们可以轻松地为任何函数添加日志记录功能,而无需修改函数本身的代码。