Я изучаю 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
Может ли кто-нибудь помочь мне прояснить это в моем сознании?