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



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

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

itertools.imap文档中有说明:

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

最新更新