一尘不染

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

python

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

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

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

print name_lengths
# => [4, 4, 3]

在Python 3中产生以下结果:

<map object at 0x100b87a20>

我有两个问题:

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

阅读 167

收藏
2021-01-20

共1个答案

一尘不染

如所述,在迁移指南中

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

Python 2

将函数应用于所有iterable项,并返回结果 列表

Python 3

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

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

2021-01-20