python迭代器与生成器
时间: 2023-08-30 14:11:29 浏览: 95
在Python中,迭代器(iterator)是一个对象,它能够被迭代,即能够被用在循环语句中。迭代器必须实现两个方法:\_\_iter\_\_() 和 \_\_next\_\_()。其中,\_\_iter\_\_() 返回迭代器对象本身,\_\_next\_\_() 返回迭代器的下一个值。如果没有更多的值可供返回,那么就应该抛出 StopIteration 异常。
例如,我们可以使用一个迭代器来遍历一个列表:
```python
my_list = [1, 2, 3]
my_iterator = iter(my_list)
print(next(my_iterator)) # 输出 1
print(next(my_iterator)) # 输出 2
print(next(my_iterator)) # 输出 3
```
生成器(generator)是一种特殊的迭代器,它是通过函数来实现的。生成器函数使用关键字 yield 来返回一个值,而不是使用 return。当函数被调用时,它并不会立即执行,而是返回一个生成器对象。当调用生成器对象的 \_\_next\_\_() 方法时,函数才会执行,并且执行到 yield 关键字时会返回一个值。
例如,下面的代码是一个简单的生成器函数,它生成斐波那契数列:
```python
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
# 使用生成器函数来生成斐波那契数列
f = fibonacci()
for i in range(10):
print(next(f))
```
输出结果为:
```
0
1
1
2
3
5
8
13
21
34
```
在这个例子中,我们定义了一个无限循环的生成器函数 fibonacci(),它每次返回斐波那契数列中的下一个数。我们使用 for 循环来遍历生成器对象 f,并且调用 next(f) 来获取每个数。由于生成器函数是无限循环的,所以我们需要使用 range(10) 来限制循环次数。
阅读全文