我正在研究Alex Marteli 的 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'
在困惑中,我试图通过研究 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
但是列表怎么可能不是迭代器,因为它似乎支持这个接口,并且在以下上下文中肯定可以用作一个:
>>> for number in x:
... print x
有人可以帮我澄清一下吗?