python中装饰器函数的工作原理与流程
时间: 2024-10-25 08:14:28 浏览: 23
装饰器是Python中一种非常强大的语法特性,它可以在不改变原有函数定义的情况下,通过添加额外的功能来对函数进行扩展。装饰器本质上是一个函数,可以接受一个函数作为参数,并返回一个新的函数。
装饰器的工作原理如下:
1. 定义一个装饰器函数,该函数接受一个函数作为参数,并返回一个新的函数。
2. 在需要对某个函数进行装饰的地方,使用“@装饰器函数”将装饰器函数应用到该函数上。
3. 装饰器函数将会在原有函数被调用之前或之后执行一些额外的操作,比如记录日志、计时、权限验证等。
4. 装饰器函数可以返回一个新的函数,该新函数将会替代原有函数被调用。
以下是一个简单的装饰器示例,该装饰器用于记录函数运行时间:
```
import time
def timer(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print("Function {0} running time is {1:.2f}s".format(func.__name__, end_time - start_time))
return result
return wrapper
@timer
def test():
time.sleep(1)
test()
```
运行结果为:
```
Function test running time is 1.00s
```
以上代码中,装饰器函数`timer`接受一个函数作为参数,并返回一个新的函数`wrapper`。在`test`函数上方加上`@timer`,相当于将`test`函数作为参数传给`timer`函数,并将返回的新函数`wrapper`替代原有的`test`函数。当调用`test()`时,实际上执行的是新的函数`wrapper`。在`wrapper`内部,首先记录了当前时间,然后调用原有的`test`函数并获取其返回值,最后记录结束时间并打印出运行时间。
阅读全文