Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代器与可数?_Python_Iterator - Fatal编程技术网

Python 迭代器与可数?

Python 迭代器与可数?,python,iterator,Python,Iterator,(对于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] 6. [7,8] 坦率地说

(对于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]

6.
[7,8]
坦率地说,这不是我所期望的。映射对象是迭代器还是iterable?有什么区别吗?显然,
list()
next()
函数都在映射对象上工作,不管它是什么


为什么它们都能工作?

迭代器是一个iterable,但iterable不一定是迭代器

iterable是任何定义了
\uuu iter\uuu
方法的东西,例如列表、元组以及迭代器


迭代器是iterables的一个子集,其值不能全部同时访问,因为它们不是一次性存储在内存中。可以使用诸如
map
filter
iter
等函数以及使用
yield
的函数生成这些函数

在您的示例中,
map
返回一个迭代器,它也是一个iterable,这就是为什么两个函数都使用它。但是,如果我们以列表为例:

>>> 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
>lst=[1,2,3]
>>>列表(lst)
[1, 2, 3]
>>>下一站(lst)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
下一站(lst)
TypeError:“list”对象不是迭代器

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

python文档说
map
的结果总是一个列表,考虑到您的结果,这看起来很奇怪。您是对的。在Python3中,它说“返回一个迭代器”,所以您就有了答案。我只是做了一个谷歌搜索,使用了第一个结果,没有检查版本。@LasseV.Karlsen在Python 3中,大多数函数,
range
filter
map
,开始返回迭代器。它的内存效率更高,(不再是
xrange
)“迭代器是iterables的一个子集,它们的值不能同时访问,因为它们不是一次全部存储在内存中”:这是完全错误的。例如,如果您在2025年之前阅读此内容,则Python3的
范围(10000000000000000)
iterable的值无法放入笔记本电脑的内存中。然而,这个iterable不是迭代器。正确的定义是“迭代器是具有
next
method的iterables的子集。”