为什么map返回迭代器

时间:2014-08-06 16:50:57

标签: python python-3.x iterator

问题非常明确,为什么map()(以及zip()filter()而不是range()不返回迭代器)返回迭代器?我的意思是我希望它只返回 iterable ,为什么选择这个?

1 个答案:

答案 0 :(得分:6)

因为返回可迭代序列需要预先生成所有新值

如果输入也是一个迭代器,那不是一个好主意,特别是如果迭代器是无限那么。

通过可调用的逐个映射值不会要求一次性处理所有值,因此map()不会这样做,而是应用可调用的按需。这样它就可以很好地用于序列和潜在的无限迭代。

如果您希望将可迭代序列作为输出,请改为使用列表推导:

[callable(elem) for elem in inputiterator]

请注意,我使用术语可迭代序列而不是更通用的术语 iterable ; iterators 已经 可迭代 iterable 对象是生成迭代器的任何对象,迭代器始终是自己的迭代器。