本文共 1109 字,大约阅读时间需要 3 分钟。
装饰器在 Python 中无处不在,功能强大。本文将从基本概念到具体实例,帮助您理解这一强大工具的用法和原理。
我们从一个简单的例子开始。假设有一个函数foo(),它执行了一些简单的操作。为了让这个函数在执行前后打印提示信息,我们可以使用装饰器来完成。
完整的代码如下:
def outer(func): def inner(): print("before execution.") func() print("after execution.") return inner@outerdef foo(): print("do something.")if __name__ == "__main__": foo() 程序运行后会输出:
before execution.do something.after execution.
装饰器机制允许我们在不修改原函数代码的情况下扩展其功能。在上述示例中,outer函数接收一个函数对象作为参数,并返回一个新函数inner()。用户定义的函数foo()通过@outer装饰后,被替换为inner(),这样在调用foo()时,实际执行的是inner(),它会在执行原函数foo()之前和之后打印提示信息。
想实现更复杂的功能,如记录日志,可以定义更授精шая的装饰器。以下是一个实例:
from datetime import datetimedef logger(msg): def decorator(func): def wrapper(*args, **kwargs): print(f'[INFO] {datetime.now()}, {func.__name__} was called with message "{msg}"') return func(*args, **kwargs) return wrapper return decorator@logger("Maybe bored.")def foo(name): print(f"do something, {name}")foo('Johnny') 运行后,输出会是:
[INFO] 2023-10-25 12:34:56,809, foo was called with message "Maybe bored."
注意: 如果您有任何问题,请告诉我。我会尽力为您解答。
转载地址:http://tbthz.baihongyu.com/