解决python 3 vs python 2中的map函数问题

hro*_*okr 2 python functional-programming python-2.7 python-3.x

我对使用python进行函数式编程感兴趣,并且正在阅读Mary Rose Cook的博客文章函数式编程的实用介绍

显然,它是用python 2编写的,如下所示:

name_lengths = map(len, ["Mary", "Isla", "Sam"])

print name_lengths
# => [4, 4, 3]
Run Code Online (Sandbox Code Playgroud)

在Python 3中产生以下结果:

<map object at 0x100b87a20>
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为什么会这样呢?
  2. 除了将地图对象转换为列表然后使用numpy之外,还有其他解决方案吗?

dhk*_*hke 5

如所述,在迁移指南中

在Python 2中,map()返回一个列表,而在Python 3中,它返回一个迭代器。

Python 2

将函数应用于每个iterable项目,并返回结果列表

Python 3

返回一个将函数应用于所有iterable的迭代器,并产生结果。

Python 2总是等效于list(imap(...)),Python 3允许进行惰性求值。