(用于python 3)
在python中,你可以看到表示list()函数需要一个可迭代。
在python中,你也可以看到表示next()函数需要一个迭代器。
所以我在空闲时做了这件事:
>>> var = map(lambda x: x+5, [1,2,3])
>>> var
>>> next(v)
>>> list(v)它提供了输出:
<map object at 0x000000000375F978>
6
[7,8]坦白说,这不是我所期望的。映射对象是迭代器还是可迭代对象?有什么不同吗?显然,list()和next()函数都在映射对象上工作,不管它是什么。
为什么他们都在工作?
发布于 2013-09-15 06:23:29
迭代器是可迭代的,但迭代器不一定是迭代器。
可迭代是任何定义了__iter__方法的东西,例如列表和元组以及迭代器。
迭代器是可迭代性的子集,其值不能同时被访问,因为它们不是同时存储在内存中。可以使用像map、filter和iter这样的函数以及使用yield的函数来生成这些函数。
在您的示例中,map返回一个迭代器,它也是一个可迭代的,这就是为什么这两个函数都与它一起工作的原因。然而,如果我们以一个列表为例:
>>> 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抱怨,因为列表是可迭代的,不是迭代器。
https://stackoverflow.com/questions/18809475
复制相似问题