装饰器是 Python 提供的一种语法糖,用于在运行时动态地增强函数或类的功能。
在 Python 中,装饰器(Decorator) 的作用是:
(1)在不修改原函数代码和调用方式的情况下,为函数添加额外功能。
(2)它本质上是一个高阶函数,接收一个函数作为参数并返回一个新的函数。
装饰器的核心作用
-
添加日志功能
-
添加权限校验
-
统计函数执行时间
-
缓存函数结果
-
事务处理、上下文管理等
def repeat(times): # 装饰器参数
def decorator(func): # 原函数
def wrapper(*args, **kwargs):
for _ in range(times):
func(*args, **kwargs)
return wrapper
return decorator
@repeat(3) # 执行3次
def greet():
print("Hi")
greet()
输出如下:
Hi
Hi
Hi
定义 ( def ):你首先定义了 repeat 这个装饰器和 greet 这个函数。
装饰 ( @repeat(3) ):Python 解释器看到 @repeat(3) 后,会自动执行装饰过程。
它会创建一个新的函数(就是 wrapper ),这个新函数的功能是"执行原函数3次"。
然后,它让 greet 这个名字指向这个新的 wrapper 函数。
此时,函数还没有被执行,只是被"改造"了。
调用 ( greet() ):当你在代码中写下 greet() 并运行时,Python 会去执行 greet 这个名字所指向的函数。
由于它已经被装饰器改造过了,所以此时执行的是 wrapper 函数。
wrapper 函数的逻辑是:循环3次,每次都调用一次原始的 greet 函数。
原始的 greet 函数的功能是打印一次 "Hi" 。
因此,最终结果就是 "Hi" 被打印了3次。