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,)]
有谁知道这种差异的原因?这是故意的吗?这是其他一些设计选择/因素的巧合吗?这是(设计)缺陷吗?它是否有助于在某种特定情况下避免自身的特定目的?
答案 0 :(得分:1)
itertools.imap
documentation中说明了这一点:
... 如果函数设置为None,则imap()将参数作为元组返回。与map()一样,但在最短的iterable耗尽时停止,而不是填写None for short iterables。产生差异的原因是无限迭代器参数通常是map()的错误(因为输出已被完全评估),但它代表了向imap()提供参数的常用且有用的方法。