哪个PEP设计文档决定使用map函数,可迭代而不是实现list.map

问题描述

我想知道Python标准库中没有list.map()的原因。

还有其他选择,例如map(function,iterable)和列表理解。

我找不到说明为什么选择地图而不是实现list.map()的PEP(设计文档)

假设我们有一个这样的列表:

foo = [1,2,3,4,5,6]

我相信这段代码

foo.map(function)

# or

foo.map(lambda x: x*2)

比以下内容更具可读性:

least_readable = list(map(lambda x: x*2,foo))

least_readable = list(map(multiply_by_two,foo))

这对我来说足够可读

it_readable_enough_for_me = [multiply_by_two(x) for x in foo]

这个对我来说更具可读性,但不存在:

does_not_exist = foo.map(multiply_by_two)

我相信,如果不存在,那一定有原因。

不仅仅是因为map(function,iterable)更通用。 我想背后一定有一个重要的原因,我看不到。

解决方法

没有。

PEP 201,第二个稳定实施的PEP,说:

通过使用内置的map()函数,该行为已经可以在Python中完成

map函数在bltinmodule.c中定义,并在commit a6c603中添加。先前的位置是itertoolsmodule.c,该位置最初是在2003年2月1日在commit 96ef81中引入的。到目前为止,还没有PEP会添加此功能。

根据Wikipedia

Python于1994年1月到达1.0版。此发行版中包含的主要新功能是功能编程工具lambdamapfilterreduce。范·罗瑟姆(Van Rossum)表示:“ Python是由Lisp黑客提供的,他们错过了Lambda,reduce(),filter()和map()并提交了有效补丁”。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...