实例演示:Python 中的装饰器模式设计模式
装饰器模式是一种常用的设计模式,它可以在不改变原有代码的情况下,对其进行功能扩展。在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 进行了扩展,记录下了函数的运行时间。这种装饰器模式可以让我们在不改变原有代码的情况下,方便地对其进行功能扩展,具有很高的灵活性和可维护性。
相关文章