问题非常明确,为什么map()
(以及zip()
和filter()
而不是range()
不返回迭代器)返回迭代器?我的意思是我希望它只返回 iterable ,为什么选择这个?
答案 0 :(得分:6)
因为返回可迭代序列需要预先生成所有新值 。
如果输入也是一个迭代器,那不是一个好主意,特别是如果迭代器是无限那么。
通过可调用的逐个映射值不会要求一次性处理所有值,因此map()
不会这样做,而是应用可调用的按需。这样它就可以很好地用于序列和潜在的无限迭代。
如果您希望将可迭代序列作为输出,请改为使用列表推导:
[callable(elem) for elem in inputiterator]
请注意,我使用术语可迭代序列而不是更通用的术语 iterable ; iterators 已经 可迭代。 iterable 对象是生成迭代器的任何对象,迭代器始终是自己的迭代器。