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(( 提供参数的常见且有用的方法。