I am studying Alex Marteli's Python in a Nutshell and the book suggests that any object that has a next()
method is (or at least can be used as) an iterator. It also suggests that most iterators are built by implicit or explicit calls to a method called iter
.
After reading this in the book, I felt the urge to try it. I fired up a python 2.7.3 interpreter and did this:
>>> x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for number in range(0, 10):
... print x.next()
However the result was this:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: 'list' object has no attribute 'next'
In confusion, I tried to study the structure of the x object via dir(x)
and I noticed that it had a __iter__
function object. So I figured out that it can be used as an iterator, so long as it supports that type of interface.
So when I tried again, this time slightly differently, attempting to do this:
>>> _temp_iter = next(x)
I got this error:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator
But how can a list NOT be an iterator, since it appears to support this interface, and can be certainly used as one in the following context:
>>> for number in x:
... print x
Could someone help me clarify this in my mind?