当None作为映射函数传递时,为什么itertools.imap的行为与map不同?

时间:2013-10-04 15:47:11

标签: python python-2.7 collections itertools

imap(None, lst)似乎返回包含1元组的所有项目的列表,而map(None, lst)只返回列表的副本:

>>> map(None, range(3))
[0, 1, 2]

>>> from itertools import imap
>>> list(imap(None, range(3)))
[(0,), (1,), (2,)]

有谁知道这种差异的原因?这是故意的吗?这是其他一些设计选择/因素的巧合吗?这是(设计)缺陷吗?它是否有助于在某种特定情况下避免自身的特定目的?

1 个答案:

答案 0 :(得分:1)

itertools.imap documentation中说明了这一点:

  

... 如果函数设置为None,则imap()将参数作为元组返回。与map()一样,但在最短的iterable耗尽时停止,而不是填写None for short iterables。产生差异的原因是无限迭代器参数通常是map()的错误(因为输出已被完全评估),但它代表了向imap()提供参数的常用且有用的方法。