Я изучаю Alex Marteli Python в двух словах, и книга предполагает, что любой объект, который имеет метод next(), (или, по крайней мере, может быть использован как) итератор. Он также предполагает, что большинство итераторов построены неявными или явными вызовами метода под названием iter.
Прочитав это в книге, я почувствовал желание попробовать. Я запустил интерпретатор python 2.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
Но как список NOT может быть итератором, поскольку он, кажется, поддерживает этот интерфейс и может быть определенно использован как один в следующем контексте:
>>> for number in x:
... print x
Может ли кто-нибудь помочь мне прояснить это в моем сознании?