问题描述
它们是 可迭代的 ,但不是 迭代器 。可以将它们传递给iter()
隐式地(例如通过for
)或显式地为其获取迭代器,但是它们本身并不是迭代器。
解决方法
我正在研究[Alex Marteli的《Nutshell》中的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
但是列表如何不能成为迭代器,因为它似乎支持该接口,并且可以肯定地在以下情况下用作一个迭代器:
>>> for number in x:
... print x
有人可以帮我澄清一下这个想法吗?