当我在命令行执行此操作时(对于filter和reduce相同)
map( lambda x: x+1, [1,2,3,4,5] )
而不是列表/集合结果......我得到了
<map object at 0x6ffffe7b630>
获取列表我必须应用list()函数 如果我使用普通的旧函数来替换lambda ...同样的事情......
为什么会出现这种情况?
答案 0 :(得分:2)
因为许多迭代函数使用“懒惰”评估。即,它们不立即应用该功能列表的所有元素。相反,当迭代“地图对象”时,他们使用协程一次应用一个函数。
当一些(但不是全部)项目将被迭代,或者可能不需要一次确定时,这是一个性能特征。 lambda仅在需要时应用。以前版本的python没有这个优化,只是在调用NSString *sText = @"Hello";
[sText drawInRect:CGRectMake(x, y, 150, 20) withAttributes: @{ NSFontAttributeName :
[NSFont boldSystemFontOfSize:fSize] }];
后将lambda应用于所有内容。
答案 1 :(得分:1)