实现 __next__()
Coddy Python 迭代器 课程的第 5 课,共 13 课。
__next__() 方法是使用 Python 创建自定义迭代器的重要部分。它定义了如何获取迭代序列中的下一个项。实现 __next__() 时,你可以控制迭代器的行为,决定它生成哪些值,以及何时停止。
__next__() 的作用
__next__() 方法有两个主要作用:
- 返回序列中的下一个项
- 没有更多项时引发
StopIteration异常
实现 __next__()
下面是实现 __next__() 的基本结构:
class MyIterator:
def __init__(self, data):
self.data = data
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index >= len(self.data):
raise StopIteration
result = self.data[self.index]
self.index += 1
return result
__next__() 的关键方面
- 状态管理:跟踪迭代的当前状态(例如,使用索引)。
- 返回下一个项:确定并返回序列中的下一个项。
- StopIteration:没有更多项时引发
StopIteration。 - 副作用:更新下一次迭代所需的内部状态。
示例:自定义范围迭代器
下面是一个自定义迭代器的示例,它模仿了 Python range()</function> 的简化版本:</p>
<pre><code class="language-python">class CustomRange:
def __init__(self, start, end):
self.current = start
self.end = end
def __iter__(self):
return self
def __next__(self):
if self.current >= self.end:
raise StopIteration
result = self.current
self.current += 1
return result
# 使用自定义的范围迭代器
for num in CustomRange(1, 5):
print(num) # 输出:1, 2, 3, 4
在这个示例中,__next__() 返回当前数字,并将它递增以供下一次迭代使用;到达结束值时,会引发 StopIteration。
通过实现 __next__(),你可以定义迭代器的核心行为,让它能够与 Python 的迭代机制无缝协作,例如 for 循环和 next() 函数。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
挑战
简单创建一个名为 FibonacciIterator 的自定义迭代器类,生成不超过指定上限的斐波那契数。斐波那契数列从 0 和 1 开始,之后的每个数都是前两个数之和。
已提供以下内容:
- 一个作为输入的整数
limit
你的 FibonacciIterator 类应当:
- 实现
__next__()方法,生成下一个斐波那契数 - 当下一个斐波那契数超过给定上限时,停止迭代
- 当数列耗尽时,抛出
StopIteration异常
实现 FibonacciIterator 类后,使用输入的上限创建其实例,并将生成的每个斐波那契数打印在新的一行。
输入将以表示整数的字符串形式提供。
亲手试试
# 读取输入
limit = int(input())
class FibonacciIterator:
def __init__(self, limit):
self.limit = limit
self.a, self.b = 0, 1
def __iter__(self):
return self
def __next__(self):
# TODO: 实现 __next__() 方法
# 生成下一个斐波那契数
# 序列结束时抛出 StopIteration
pass
# 创建一个 FibonacciIterator 实例
fib_iterator = FibonacciIterator(limit)
# TODO: 遍历斐波那契数列并打印每个数
# 注意:确保打印每个斐波那契数,以通过测试用例Python 迭代器中的所有课
自己练习: Python 在线编译器