不写函数的话直接写循环的话怎么实现yield的效果
时间: 2024-02-26 18:57:21 浏览: 22
如果不使用函数而是使用循环来实现yield的效果,我们可以使用生成器(generator)来实现。
下面是一个简单的例子,它展示了如何使用循环来实现生成器:
```python
class MyGenerator:
def __init__(self, n):
self.n = n
def __iter__(self):
self.i = 0
return self
def __next__(self):
if self.i >= self.n:
raise StopIteration
else:
self.i += 1
return self.i - 1
gen = MyGenerator(5)
for i in gen:
print(i)
```
在这个例子中,我们定义了一个名为 `MyGenerator` 的类,它接受一个参数 `n`,表示生成器将会生成 `n` 个数。在 `__iter__` 方法中,我们初始化了一个计数器 `self.i` 并返回了自身。在 `__next__` 方法中,我们检查计数器是否已经达到了 `n`,如果是,则抛出 `StopIteration` 异常终止迭代,否则将计数器加1并返回当前的计数器值。
我们可以使用类似下面的代码来使用这个生成器:
```python
gen = MyGenerator(5)
for i in gen:
print(i)
```
这段代码会输出 0 到 4,这个输出结果和使用 `yield` 生成器是一样的。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)