Menu
CoddyTech

实现 __iter__()

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

在 Python 中创建自定义迭代器,需要在类中实现 __iter__() 方法。这个方法是迭代器协议的重要组成部分,你可以用它定义自定义对象作为迭代器时的行为。

__iter__() 方法

__iter__() 方法有两个主要用途:

  1. 让对象可迭代。
  2. 返回迭代器对象本身。

下面是包含 __iter__() 方法的类的基本结构:

class MyIterator:
    def __init__(self, data):
        self.data = data
        self.index = 0

    def __iter__(self):
        return self

实现 __iter__()

要在自定义类中实现 __iter__():

  1. 在类中定义 __iter__() 方法。
  2. 该方法应返回迭代器对象本身(通常是 self)。

下面是一个简单的自定义迭代器示例:

class CountDown:
    def __init__(self, start):
        self.start = start

    def __iter__(self):
        # 返回迭代器对象(self)
        return self

    def __next__(self):
        if self.start <= 0:
            raise StopIteration
        self.start -= 1
        return self.start + 1

# 使用自定义迭代器
countdown = CountDown(5)
for num in countdown:
    print(num)

在这个示例中,__iter__() 方法返回 self,因此 CountDown 对象既可迭代,也是它自己的迭代器。

要点

  • 对对象使用 iter() 函数,或在 for 循环中使用对象时,都会调用 __iter__() 方法。
  • 当类同时实现 __iter__() 和 __next__() 时,在 __iter__() 中返回 self 是很常见的做法。
  • 如果你的类只实现了 __iter__(),它应返回一个单独的迭代器对象,该对象具有 __next__() 方法。

通过实现 __iter__(),你可以让自定义对象变得可迭代,从而在 for 循环以及 Python 中其他基于迭代器的操作中使用它们。

quiz icon自我测试

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

quiz icon自我测试

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

quiz icon自我测试

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

challenge icon

挑战

简单

创建一个名为 AlphabetIterator 的自定义迭代器类,用于生成英文字母表中的大写字母。迭代器应从 'A' 开始,一直生成到指定字母。

你会获得以下输入:

  • 一个大写字母(例如 'E'、'K'、'Z')

你的 AlphabetIterator 类应:

  • 实现 __iter__() 方法,使对象可以迭代
  • 从 'A' 开始生成大写字母
  • 到达指定的输入字母时停止(包括该字母)

实现 AlphabetIterator 类后,使用输入字母创建该类的一个实例,并将生成的每个字母打印在新的一行。

输入将以字符串形式提供,其中包含一个大写字母。

亲手试试

# 读取输入
end_letter = input().strip()

class AlphabetIterator:
    def __init__(self, end_letter):
        self.end_letter = end_letter
        self.current_letter = 'A'

    def __iter__(self):
        return self

    # TODO:实现 __next__() 方法

# 创建一个 AlphabetIterator 实例
alphabet_iter = AlphabetIterator(end_letter)

# TODO:遍历 AlphabetIterator 并打印每个字母

# 注意:确保每个字母单独打印在一行

Python 迭代器中的所有课

自己练习: Python 在线编译器