簡體   English   中英

沒有__iter __()方法的類生成器,但是對象實例與next()一起使用

[英]Class generator without the __iter__() method but object instance works with next()

我試圖理解有一個類來創建一個生成器的代碼,該生成器稍后將使用下一個()內置的小說進行迭代。

有問題的課程是這樣的:

Class MyGen():
    def __init__(self):
    """ Define some instance attributes"""
        self.foo = 'bar'
        self.some_attribute = 0
    def __next__(self):
        if self.some_attribute < some_condition:
            new_value = self.argument1
            self.some_attribute += 1
            return new_value

在全局函數中,返回的對象由next()內置函數迭代。 那是...

gen = Mygen()
next(gen) # Returns values

我不明白如果沒有__iter__()方法,該類如何成為一個生成器。 是否需要__iter__()方法從類生成生成器? 在我搜索的任何地方,似乎__iter__()__next__()一起用於從類創建生成器。

我對Python很新。 這個代碼示例是我最好的嘗試,以顯示我遇到的問題,因為實際的代碼做得更多,並且會減少問題並且太長而無法放在這里。 我沒有足夠的經驗知道如何縮短它,或者需要更多信息。

在大多數情況next(x)幾乎直接轉換為x.__next__()

所以你的__next__方法被調用,而gen不是一個“真正的”生成器。

調用是有效的,它只是一個簡單的方法調用(不做任何假設或檢查對象)。

對象上的__iter__方法應返回該對象的迭代器。 它應該被定義為任何可迭代的對象,並由builtin iter()函數或各種語句調用(例如for i in obj: loop中的for i in obj:的初始化步驟中)

迭代器只是一個帶有__next__方法的東西,它返回迭代的下一個項目,或者在沒有項目的情況下引發StopIteration 它由內置的next()函數調用,並在各種情況下調用(例如,在for循環的主體之前)

生成器是一個可迭代的,它很可能是不可重復的,所以它通常表示為一個迭代器,它也是一個迭代器。 因此對於大多數生成器,它們定義了一個__next__方法來生成下一個元素,以及一個只返回self的__iter__方法。

暫無
暫無

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

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