Python - __iter__ 的内部运作

Python - inner workings of __iter__

我得到了以下 class:

class RandomNumbers:
    def __init__(self, length, *, range_min=0, range_max=10):
        self.length = length
        self.range_min = range_min
        self.range_max = range_max
        self.i = 0

    def __len__(self):
        return self.length

    def __next__(self):
        if self.i >= self.length:
            raise StopIteration
        number = random.randint(self.range_min, self.range_max)
        self.i += 1
        return number

    def __iter__(self):
        print("I was called")
        return self

这允许我使用 for 循环:

for number in RandomNumbers(10):
    print(number)

这行得通。当我注释掉 __iter__ 时,出现以下错误:

TypeError: 'RandomNumbers' object is not iterable

好的,到目前为止一切顺利。我知道我需要 __iter__ 方法,但为什么它实际上只有 returns self?

您的 for 循环可以重写为这个有点等效的代码

it = iter(RandomNumbers(10))
while True:
    try:
        number = next(it)
    except StopIteration:
        break
    else:
        # Body of the for loop
        print(number)

您的 class 需要实现 __iter__ 方法以使用迭代器响应 iter() 函数,在您的情况下 self 因为您的 class实现 __next__ 使其成为迭代器