- 装饰器的工作方式类似于“包装”函数。当你应用一个装饰器到一个函数上时,装饰器函数会接收被装饰的函数作为参数,并返回一个新的函数。这个新函数通常会在调用原始函数之前或之后执行一些操作,例如记录日志、验证参数、修改返回值等。
- 装饰器在Python中的应用非常广泛,可以用于各种场景,如:
-
日志记录: 装饰器可以用来记录函数的调用时间、参数和返回值,用于调试和性能分析。
-
权限验证: 装饰器可以用来检查用户的权限,确保只有具有特定权限的用户才能访问某些函数或方法。
-
缓存: 装饰器可以用来缓存函数的计算结果,避免重复计算。
-
输入验证: 装饰器可以用来验证函数的输入参数,确保它们满足特定的条件。
-
代码跟踪: 装饰器可以用来跟踪函数的调用链,帮助理解代码的执行流程。
-
在Python中,可以使用 @ 符号来应用一个装饰器。以下是一个简单的装饰器示例:
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
在这个示例中,my_decorator
是一个装饰器函数,它接收一个函数 func
作为参数,并返回一个新的函数 wrapper
。通过 @my_decorator
,我们将装饰器应用到了 say_hello
函数上。当调用 say_hello()
时,实际上会调用 wrapper
函数,从而在函数执行前后添加了一些操作。