我正在学习 亚历克斯 · 马泰利的《果壳里的巨蟒》,这本书建议任何具有 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
有没有人能帮我理清思路?