Menu
CoddyTech

实现 __next__()

Coddy Python 迭代器 课程的第 5 课,共 13 课。

__next__() 方法是使用 Python 创建自定义迭代器的重要部分。它定义了如何获取迭代序列中的下一个项。实现 __next__() 时,你可以控制迭代器的行为,决定它生成哪些值,以及何时停止。

__next__() 的作用

__next__() 方法有两个主要作用:

  1. 返回序列中的下一个项
  2. 没有更多项时引发 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() 函数。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

challenge icon

挑战

简单

创建一个名为 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 在线编译器