私はAlexMarteliのPythonを一言で調べnext()
ていますが、この本は、メソッドを持つオブジェクトはすべてイテレーターである(または少なくともイテレーターとして使用できる)ことを示唆しています。また、ほとんどのイテレータは、と呼ばれるメソッドへの暗黙的または明示的な呼び出しによって構築されることも示唆していますiter
。
本でこれを読んだ後、私はそれを試してみたいという衝動を感じました。私はpython2.7.3インタープリターを起動し、これを行いました:
>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
... print x.next()
しかし、結果はこれでした:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'
混乱して、xオブジェクトの構造を経由して調べてみたところ、関数オブジェクトdir(x)
があることに気づきました。__iter__
そのため、そのタイプのインターフェイスをサポートしている限り、イテレータとして使用できることがわかりました。
したがって、もう一度試してみると、今回は少し違った方法で、これを実行しようとしました。
>>> _temp_iter = next(x)
このエラーが発生しました:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
しかし、リストはこのインターフェースをサポートしているように見え、次のコンテキストで確実に1つとして使用できるため、どのようにしてリストをイテレーターにできないのでしょうか。
>>> for number in x:
... print x
誰かが私の心の中でこれを明確にするのを手伝ってもらえますか?