修饰器的工作原理是什么?
时间: 2024-09-21 19:12:56 浏览: 33
修饰器的工作原理基于Python的动态特性,即函数可以像普通变量一样被赋值和传递。当一个函数被修饰器`@decorator`装饰时,实际上是在该函数定义之前,将原函数`func`作为参数传递给了`decorator`函数,并将`decorator(func)`的结果赋给了原来的函数名。
`decorator`函数内部会创建一个新的函数`wrapper`,这个新的函数通常会在执行原函数前后添加一些额外的操作。然后`decorator`返回的就是这个`wrapper`函数。当我们直接调用`func`的时候,实际上是调用了`wrapper`,实现了对原函数行为的修改。
举个简单的例子,如果有一个计算时间的修饰器:
```python
def timer_decorator(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f"{func.__name__} executed in {end_time - start_time} seconds.")
return result
return wrapper
@timer_decorator
def my_function():
time.sleep(2)
my_function() # 输出:my_function executed in 2.000583029937744 seconds.
```
这样,每次调用`my_function`时都会自动计时。
阅读全文