可以自己定义迭代器吗?再举个例子
时间: 2023-08-08 09:06:14 浏览: 41
当然可以,下面再给一个例子:
```python
class Fibonacci:
def __init__(self, n):
self.n = n
self.current = 0
self.next = 1
self.counter = 0
def __iter__(self):
return self
def __next__(self):
if self.counter >= self.n:
raise StopIteration
else:
self.counter += 1
result = self.current
self.current, self.next = self.next, self.current + self.next
return result
```
在这个例子中,我们定义了一个 `Fibonacci` 类,它实现了迭代器协议(即 `__iter__()` 和 `__next__()` 方法)。这个迭代器可以在初始化时指定一个整数 `n`,然后依次返回斐波那契数列中前 `n` 个数。我们可以使用 `for ... in ...` 循环或者 `next()` 函数来遍历这个迭代器:
```python
fib = Fibonacci(10)
for i in fib:
print(i)
# 输出:0 1 1 2 3 5 8 13 21 34
fib = Fibonacci(10)
while True:
try:
print(next(fib))
except StopIteration:
break
# 输出:0 1 1 2 3 5 8 13 21 34
```
这个例子中,我们定义了一个斐波那契数列的迭代器,它实现了比较复杂的逻辑。我们可以使用这个迭代器来生成任意长度的斐波那契数列,而不需要事先计算出所有的数。这是迭代器的一个重要特点,它能够按需生成数据,而不需要一次性生成所有数据。