Python中的装饰器是一种高级Python语法。它本质上是一个Python函数,它可以让其他函数或类在不需要做任何代码修改的前提下增加额外功能,装饰器的返回值也是一个函数/就可以抽离出大量与函数功能本身无关的代码,使函数主体逻辑更加清晰。
让我们通过一个例子来看看装饰器是如何工作的。假设我们有一个简单的函数,它只是打印一句话:
def hello():
print("Hello, world!")
现在,我们想要在每次调用这个函数时,都自动打印一条消息,告诉我们函数被调用了。我们on
def log_func(func):
rgs):
print(f"{func.name} is called.")
return func(args, *kwargs)
return wrapper
@log_func
def hello():
print("Hello, world!")
```
在这个例子中,log_func
就是我们的装饰器。它接受一个函数作为参数,然后返回一个新的函数wrapper
。这个新的函数在调用原函数之前,先打印一条消息,然后再调用原函数。
我们在定义hello
函数时,使用了@log_func
这个装饰器。这实际上是将hello
函数作为参数传递给log_func
,然后将log_func的返回值(也就是
wrapper函数)赋值给
hello。所以,当我们调用
hello()时,实际上是在调用
wrapper()`,这就是为什么我们能看到"Hello, world!"和"hello is called."两条消息的原因。
这就是装饰器的基本工作原理。通过这种方式,我们可以在不修改原函数的情况下,为函数添加新的功能。这使得我们的代码更加模块化,更易于维护。