为什么map返回迭代器

zer*_*uno -5 python iterator python-3.x

现在的问题是很清楚的,为什么map()(以及zip()和filter(),但不会range()不返回一个迭代)返回一个迭代器?我的意思是我希望它只返回一个可迭代的,为什么这个选择呢?

Mar*_*ers 6

因为返回一个迭代序列需要生产各种新值前面.

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

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

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

[callable(elem) for elem in inputiterator]
Run Code Online (Sandbox Code Playgroud)

请注意,我使用术语可迭代序列而不是更通用的术语可迭代 ; 迭代器也已经 可迭代了.一个可迭代的对象是可以被任何物体产生一个迭代器和迭代器始终是它自己的迭代器.