Python map / filter / reduce with function或anonymous function

时间:2016-02-10 19:02:37

标签: python collections lambda

当我在命令行执行此操作时(对于filter和reduce相同)

map( lambda x: x+1, [1,2,3,4,5] )

而不是列表/集合结果......我得到了

<map object at 0x6ffffe7b630>

获取列表我必须应用list()函数 如果我使用普通的旧函数来替换lambda ...同样的事情......

为什么会出现这种情况?

2 个答案:

答案 0 :(得分:2)

因为许多迭代函数使用“懒惰”评估。即,它们不立即应用该功能列表的所有元素。相反,当迭代“地图对象”时,他们使用协程一次应用一个函数。

当一些(但不是全部)项目将被迭代,或者可能不需要一次确定时,这是一个性能特征。 lambda仅在需要时应用。以前版本的python没有这个优化,只是在调用NSString *sText = @"Hello"; [sText drawInRect:CGRectMake(x, y, 150, 20) withAttributes: @{ NSFontAttributeName : [NSFont boldSystemFontOfSize:fSize] }]; 后将lambda应用于所有内容。

答案 1 :(得分:1)

函数map不返回列表,而是返回迭代器

  

返回一个迭代器,它将函数应用于每个iterable项,产生结果。

documentation for map有更多信息。