Python装饰器是一个很有用的功能,它可以让我们在不修改原有代码的情况下,为已有的函数或类添加额外的功能。
常见的使用场景有:
a. 函数缓存:对于一些计算量较大的函数,我们可以使用装饰器对其进行缓存,从而避免重复计算。
b. 日志记录:我们可以使用装饰器打印函数的调用日志,从而更好地了解代码的执行情况。
c. 性能测试:我们可以使用装饰器对函数进行性能测试,从而找出执行效率较低的代码。
下面我们就来学习如何使用Python装饰器。
首先,我们来看一个简单的例子。我们要为函数 say_hello 添加一个功能,即在函数执行前后分别打印一行日志,代码如下:
def say_hello(): print("Hello, world!")
say_hello()
执行结果如下:
Hello, world!
现在,我们使用装饰器来实现上面的功能。首先,我们定义一个函数 log,用于打印日志,代码如下:
def log(func): def wrapper(args, kw): print("call %s():" % func.name) return func(args, **kw) return wrapper
然后,我们使用该函数来装饰 say_hello 函数,代码如下:
@log def say_hello(): print("Hello, world!")
say_hello()
执行结果如下:
call say_hello():
Hello, world!
可以看到,我们在不修改 say_hello 函数的情况下,就为其添加了额外的功能。
需要注意的是,在使用装饰器时,我们要注意函数的参数。如果装饰的函数需要接收参数,那么我们就需要在 log 函数中添