-2

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,)]

有谁知道这种差异的原因?是故意的吗?是否与其他一些设计选择/因素巧合?它是(设计)缺陷吗?它是否服务于在某些特定环境组合中排除自身的特定目的?

4

1 回答 1

1

它在itertools.imap文档中说明:

...如果 function 设置为 None,则 imap() 将参数作为元组返回。与 map() 类似,但在最短的可迭代对象用尽时停止,而不是为较短的可迭代对象填充 None。差异的原因是无限迭代器参数通常是 map() 的错误(因为输出已被完全评估),但代表了向 imap() 提供参数的一种常见且有用的方式。

于 2013-10-04T15:49:35.423 回答