Python装饰器
在Python中,装饰器是一个特殊的函数,可以将其他函数包装在装饰器函数中,并且将被包装的函数作为参数传递给装饰器函数。
使用装饰器的好处是可以自动在被包装的函数前后执行一些额外的代码,比如在函数执行前后打印日志,或者在函数执行前后计算函数执行时间等。
下面我们通过一个简单的例子来学习如何使用装饰器。
假设我们要对一个函数进行包装,在函数执行前后分别打印一个日志。
下面是我们要包装的函数:
def func():
print("func() is running")
如果我们直接调用这个函数,将打印下面的日志:
func()
func() is running
下面是我们要使用的装饰器函数:
def decorator(func):
def wrapper():
print("wrapper() is running")
func()
print("wrapper() is done")
return wrapper
使用装饰器函数包装我们要调用的函数,只需要在函数名前加上@符号和装饰器函数名,如下所示:
@decorator
def func():
print("func() is running")
调用函数func()将自动执行decorator函数,decorator函数将func函数作为参数传递给wrapper函数,最后将wrapper函数的返回值赋给func函数。
因此,调用func()函数实际上是调用wrapper()函数。
调用wrapper()函数将打印下面的日志:
func()
wrapper() is running
func() is running
wrapper() is done
从打印的日志中可以看出,在func()函数执行前后分别打印了wrapper()函数的日志。
使用装饰器可以在不修改函数的前提下,对函数进行包装,达到额外增加功能的目的。