微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与python列表混淆:它们是迭代器还是不是迭代器?

如何解决与python列表混淆:它们是迭代器还是不是迭代器?

它们是 可迭代的 ,但不是 迭代器 。可以将它们传递给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

有人可以帮我澄清一下这个想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。