[英]How does this class implement the "__iter__" method without implementing "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.