2011-08-28 65 views
5

我在Python迭代器上有點遺失。我偶爾使用它們,但我不記得自己創建一個。我從什麼地方看,我不記得在哪裏,像這樣的代碼:什麼是迭代類方法next()和__next __()for,並且有什麼區別?

class Foo(object): 
    def __init__(self): 
     self.something = "initial_value" 
    def __iter__(self): 
     return self 
    def next(self): 
     # I don't quite remember what was here :S 
     return self.something 

我猜__iter__()方法應該返回一個迭代器,而迭代器應該有下一個方法吧?那麼__next__()方法呢?是不是直接迭代一個類而不返回帶有__iter__()方法的另一個迭代器?

+0

** foo **是一個迭代器。在這種情況下,它只是返回自己。一個對象可以支持迭代,但不能成爲迭代器。 – Wes

+0

謝謝,修正了代碼。 – yasar

回答

7

PEP 3114更名爲iterator.next()iterator.__next__()。這是在3.0版本中實現的。上面的鏈接包含了所有的血腥細節。

+1

我認爲你的意思是'iterator .__ next __()'。 :-) –

+0

@ross謝謝 –

4

next已在Python 3中重命名爲__next__。至於它的作用,它應該返回下一個項目,或者如果沒有更多項目,則會提高StopIteration

+0

這與__iter __()有何不同? –

相關問題