大锤python日记(装饰器的简单示例和过程解释)

60 阅读1分钟

装饰器示例代码如下:

def my_decorator(func):
    def wrapper():
        print("Before the function is called.")
        func()
        print("After the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello, world!")

say_hello()

在这个示例中,我们定义了一个名为 my_decorator 的装饰器函数。它接受一个函数作为参数,并返回一个内部函数 wrapper

wrapper 函数包装了传入的函数,并添加了额外的功能,然后将其调用。在这个示例中, wrapper 在调用 say_hello 前打印一条消息,然后再调用该函数,最后在调用之后再打印一条消息。

要使用装饰器,我们只需要使用 @ 符号来告诉 Python 我们要对 say_hello 函数应用 my_decorator 装饰器。这相当于执行以下代码:

say_hello = my_decorator(say_hello)  # 因此,在解释器解释事执行此处 

因此,当我们调用 say_hello() 时,实际上是调用了 wrapper() 函数。

这就是装饰器的基本工作原理:它是一个函数(或类)可以接收其他函数并返回一个新函数,而且可以在返回的新函数中添加一些额外的功能。通过使用装饰器,我们可以将代码分离成小块,每个块负责自己的单一职责。