我对使用python进行函数式编程感兴趣,并正在使用Mary Rose Cook的博客文章 A practical introduction to functional programming 。
显然,它是用python 2编写的:
name_lengths = map(len, ["Mary", "Isla", "Sam"])
print name_lengths
# => [4, 4, 3]
Python 3中的产生了这个:
<map object at 0x100b87a20>
我有两个问题:
答案 0 :(得分:3)
如记录所示,在migration guide,
在Python 2中,map()返回一个列表,而在Python 3中它返回一个迭代器。
将函数应用于iterable的每个项目并返回结果的列表。
返回一个迭代器,它将函数应用于iterable的每个项目,从而产生结果。
Python 2总是相当于list(imap(...))
,Python 3允许进行惰性求值。
答案 1 :(得分:1)
要补充@dhke的优秀答案(这个评论太长了),可以这样想。您希望通过组合map
,filter
等对列表执行多次转换。因此,有两种方法可以考虑这一点:
python3方式允许使用,而第二种方法不能在python 2中简洁地编写:您必须使用for
循环显式迭代列表并构建新的结果列表。