装饰者 是修改其他函数的功能的函数。装饰器有助于让我们的代码更简短。
当您需要扩展您不想修改的函数功能时,这是很理想的。
例如:
def decor(func):
def wrap():
print("============")
func()
print("============")
return wrap
def print_text():
print("Hello world!")
decorated = decor(print_text)
decorated()
结果:
Hello world!
我们定义了一个名为 decor 的函数,它有一个单一的参数 func。
在 decor 中,我们定义了一个名为 wrap 的嵌套函数。
wrap函数将打印一个字符串,然后调用 func(),并打印另一个字符串。
我们可以说,装饰变量是 print_text 的装饰版本 - 它是 print_text 加上一些东西。
这是通过重新赋值包含我们的函数的变量来完成的:
print_text = decor(print_text)
print_text()
Python通过预先用装饰器名称和 @symbol 预定义函数定义来提供支持,以便在装饰器中包装函数。
如果我们正在定义一个函数,我们可以使用@符号来“装饰”它:
def decor(func):
def wrap():
print("============")
func()
print("============")
return wrap
@decor
def print_text():
print("Hello world!")
print_text()
这将与上面的代码具有相同的结果。
一个函数可以有多个装饰器。