pythond的装饰器能不能装饰生成器
时间: 2023-06-11 19:07:58 浏览: 55
是的,Python 的装饰器可以装饰生成器函数。装饰器是一种 Python 函数,它可以接受另一个函数并在其基础上添加额外的功能,而不需要修改原始函数的定义。对于生成器函数,装饰器可以用于修改生成器的行为,或者向生成器添加额外的功能。以下是一个装饰器示例代码,用于在生成器函数执行之前和之后打印一些信息:
```python
def generator_decorator(func):
def wrapper(*args, **kwargs):
print("Before generator function execution")
result = func(*args, **kwargs)
print("After generator function execution")
return result
return wrapper
@generator_decorator
def my_generator():
for i in range(5):
yield i
for x in my_generator():
print(x)
```
在上面的代码中,`generator_decorator` 是一个装饰器函数,它将传入的生成器函数装饰起来。`wrapper` 函数是装饰器的内部函数,它将在传入的生成器函数执行之前和之后打印一些信息。`my_generator` 函数是一个生成器函数,它被装饰器装饰。最后,我们通过 `for` 循环遍历生成器输出。运行上面的代码会得到以下输出:
```python
Before generator function execution
0
1
2
3
4
After generator function execution
```