2011-08-28 4 views
5

Jestem trochę zagubiony na iteratorach Pythona. Czasami ich używam, ale nie pamiętam, żeby sam je stworzyć. Czytałem gdzieś, że nie pamiętam gdzie, kod tak:Jakie są metody klasy iteracji next() i __next __() dla i jaka jest różnica?

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 

Chyba __iter__() metoda ma powrócić iterator, iterator i że powinien mieć następną metodę prawo? A co z metodą __next__()? to jest do bezpośredniego iterowania w klasie bez zwracania innego iteratora z metodą __iter__()?

+0

** foo ** to iterator. W tym przypadku po prostu się zwraca. Obiekt może obsługiwać iterację, ale nie może być iteratorem. – Wes

+0

dzięki, naprawiono kod. – yasar

Odpowiedz

7

PEP 3114 zmieniono nazwę iterator.next() na iterator.__next__(). Zostało to zaimplementowane w wersji 3.0. Powyższy link zawiera wszystkie drobne szczegóły.

+1

Myślę, że masz na myśli 'iterator .__ next __()'. :-) –

+0

@ross dziękuję –

4

next została zmieniona na __next__ w Pythonie 3. Jeśli chodzi o to, co robi, powinien on powrócić następny element, albo podnieść StopIteration jeśli tam nie ma.

+0

Czym się to różni od __iter __()? –