混淆Python列表:他们或者他们不是迭代器?

我在学习Alex Marteli’s Python in a Nutshell,这本书建议任何有一个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'

在混乱,我试图通过dir(x)研究x对象的结构,我注意到它有一个__iter__函数对象。所以我想出,它可以用作一个迭代器,只要它支持那种类型的接口。

所以当我再次尝试,这个时候略有不同,尝试这样做:

>>> _temp_iter = next(x)

我得到这个错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list object is not an iterator

但是列表不能是迭代器,因为它似乎支持这个接口,并且可以肯定在下面的上下文中使用:

>>> for number in x:
...     print x

有人可以帮我澄清这在我心里吗?

它们是可迭代的,但它们不是迭代器。它们可以传递给iter(),以便为它们隐式地(例如通过for)或显式地获得一个迭代器,但它们本身不是迭代器。
http://stackoverflow.com/questions/13054057/confused-with-python-lists-are-they-or-are-they-not-iterators

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:混淆Python列表:他们或者他们不是迭代器?