首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Iterator对Iterable?

Iterator对Iterable?
EN

Stack Overflow用户
提问于 2013-09-15 06:17:43
回答 1查看 2.5K关注 0票数 6

(用于python 3)

在python中,你可以看到表示list()函数需要一个可迭代。

在python中,你也可以看到表示next()函数需要一个迭代器。

所以我在空闲时做了这件事:

代码语言:javascript
复制
>>> var = map(lambda x: x+5, [1,2,3])
>>> var
>>> next(v)
>>> list(v)

它提供了输出:

代码语言:javascript
复制
<map object at 0x000000000375F978>
6
[7,8]

坦白说,这不是我所期望的。映射对象是迭代器还是可迭代对象?有什么不同吗?显然,list()next()函数都在映射对象上工作,不管它是什么。

为什么他们都在工作?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-15 06:23:29

迭代器是可迭代的,但迭代器不一定是迭代器。

可迭代是任何定义了__iter__方法的东西,例如列表和元组以及迭代器。

迭代器是可迭代性的子集,其值不能同时被访问,因为它们不是同时存储在内存中。可以使用像mapfilteriter这样的函数以及使用yield的函数来生成这些函数。

在您的示例中,map返回一个迭代器,它也是一个可迭代的,这就是为什么这两个函数都与它一起工作的原因。然而,如果我们以一个列表为例:

代码语言:javascript
复制
>>> lst = [1, 2, 3]
>>> list(lst)
[1, 2, 3]
>>> next(lst)
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    next(lst)
TypeError: 'list' object is not an iterator

我们可以看到next抱怨,因为列表是可迭代的,不是迭代器。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18809475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档