2011-08-28 14 views
5

私はPythonイテレータで少し失われています。時にはそれらを使うこともありますが、自分で作成することは覚えていません。私は__iter__()メソッドがイテレータを返すことになって推測し、そのイテレータが次のメソッドの権利を持っている必要があり繰り返しクラスのnext()メソッドと__next __()は何の違いがありますか?

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 

:私は、このようなコードを覚えていないどこから読みますか?それでは__next__()の方法は? __iter__()メソッドを使って別のイテレータを返さずに、クラスを直接反復するのですか?

+0

** foo **はイテレータです。この場合、単にそれ自身を返します。オブジェクトは反復をサポートできますが、イテレータはサポートできません。 – Wes

+0

ありがとう、コードを修正しました。 – yasar

答えて

7

PEP 3114iterator.next()からiterator.__next__()に変更されました。これはバージョン3.0で実装されました。上記のリンクには、すべての悪質な詳細が含まれています。

+1

あなたは 'iterator .__ next __()'を意味すると思います。 :-) –

+0

@rossありがとう –

4

nextの名前は、Python 3では__next__に変更されました。機能については、次の項目を返すか、それ以上ない場合はStopIterationを呼び出す必要があります。

+0

これは__iter __()とどのように違いますか? –