装饰器在Python中是一种强大而优雅的工具,它们允许我们在不修改原始函数或类代码的情况下,动态地为其添加新的功能或行为。装饰器本质上是一个函数,它接受一个函数作为参数,并返回一个新的函数。这个新的函数通常会包含一些额外的逻辑,并在适当的时候调用原始函数。
装饰器的基本结构如下:
def decorator(func): def wrapper(*args, **kwargs): # 在这里可以添加一些额外的逻辑 result = func(*args, **kwargs) # 调用原始函数 # 在这里可以添加一些额外的逻辑 return result return wrapper
使用装饰器
要使用装饰器,只需在定义函数之前,使用@符号加上装饰器的名称。例如:
@decorator def my_function(): print("This is my function.")
这样,当我们调用my_function时,实际上是在调用decorator(my_function)返回的函数,也就是wrapper。
装饰器的应用场景:日志记录,在函数调用前后添加日志记录。性能测试,测量函数的执行时间。缓存,缓存函数的结果,避免重复计算。权限校验,检查用户是否有权限执行某个函数。
示例:下面是一个简单的装饰器示例,用于测量函数的执行时间:
import time def timer_decorator(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"The function {func.__name__} took {end_time - start_time:.4f} seconds to execute.") return result return wrapper @timer_decorator def my_slow_function(): sum = 0 for i in range(1000000): sum += i return sum print(my_slow_function())
在这个例子中,timer_decorator是一个装饰器,它测量my_slow_function的执行时间,并在函数执行完毕后打印出来。