让我们通过一个简单的例子来理解装饰器:
假设你有一个打印“Hello, World!”的函数:
def greet():
print("Hello, World!")
现在,你想在调用 greet
函数之前和之后打印一些额外的信息(比如日志),但又不想修改 greet
函数本身。这时,你可以使用装饰器来实现:
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def greet():
print("Hello, World!")
当你使用 @my_decorator
语法(这称为“装饰”)应用于 greet
函数时,实际上是用 wrapper
函数来“包装”了 greet
函数。因此,当你调用 greet()
时,它不仅会执行 greet
函数本身的内容,还会执行额外的打印操作。
当你运行以下代码:
greet()
输出将会是:
Something is happening before the function is called.
Hello, World!
Something is happening after the function is called.
这在很多场景下非常有用,比如添加日志、性能测试、事务处理、缓存等。