簡體   English   中英

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__方法,但是當它實際上只返回self時為什么需要它?

您的 for 循環可以重寫為這個有點等效的代碼

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

你的self需要實現__iter__方法來用迭代器響應iter() __next__

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM