实例演示:Python 中的装饰器模式设计模式

2023-04-03 00:00:00 模式 实例 演示

装饰器模式是一种常用的设计模式,它可以在不改变原有代码的情况下,对其进行功能扩展。在Python中,装饰器通常是一种函数,它可以接收一个函数作为参数,并返回一个新的函数,这个新函数在原有函数的基础上进行了扩展。

下面我们来演示一个实例,假设我们要实现一个记录函数运行时间的装饰器。我们可以先定义一个装饰器函数,然后在需要进行计时的函数上使用该装饰器。具体代码如下:

import time

def time_it(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        end = time.time()
        print(f"Function {func.__name__} took {end - start} seconds to run.")
        return result
    return wrapper

@time_it
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("pidancode.com")

在上述代码中,我们定义了一个装饰器函数 time_it,它接收一个函数 func 作为参数,并返回一个新的函数 wrapper。在 wrapper 函数中,我们首先记录下函数开始运行的时间 start,然后调用原有函数 func,并保存其返回值 result。最后记录下函数结束运行的时间 end,并打印出函数的运行时间。最后,我们返回保存了运行结果的 result。

在定义了装饰器函数之后,我们使用 @time_it 将其应用到函数 say_hello 上。当我们调用 say_hello("pidancode.com") 时,实际上调用的是被装饰后的函数 wrapper。该函数会先记录函数开始运行的时间,然后调用原有函数 say_hello,并在打印出函数的运行时间之后返回其运行结果。

运行上述代码,输出如下:

Hello, pidancode.com!
Function say_hello took 2.1457672119140625e-06 seconds to run.

我们可以看到,装饰器函数成功地对函数 say_hello 进行了扩展,记录下了函数的运行时间。这种装饰器模式可以让我们在不改变原有代码的情况下,方便地对其进行功能扩展,具有很高的灵活性和可维护性。

相关文章