根据我在python-dev档案中找到的内容,这只是开发人员没有遵循自己的指导方针的情况。
在介绍
OrderedDict
的PEP讨论期间,Guido实际上建议
将defaultdict
重命名为DefaultDict
来解决这个不一致性:
引用:
Anyway, it seems the collections module in particular is already
internally inconsistent -- NamedTuple
vs. defaultdict
. In a sense
defaultdict is the odd one out here, since these are things you import
from some module, they're not built-in. Maybe it should be renamed to
NamedDict
?
请注意,
NamedDict
是一个拼写错误,
他的意思是DefaultDict
:
引用:
> I suppose you mean "DefaultDict".
Yes, I've been distracted. :-(
我不确定为什么这个更改(以及其他模块的类似更改,例如socket.socket
,datetime.datetime
)从来没有被实现,因为Guido支持这样做。
具有讽刺意味的是,它是Guido(或者可能是Alex Martelli)提出了defaultdict
这个名称,尽管他们是基于Google正在使用的一个内部类DefaultDict
:
谷歌有一种内部数据类型叫做
DefaultDict
,在构造时传递一个默认值。当该值未被找到时,它的
__getitem__
方法会将给定默认值的浅拷贝插入字典中,而不是引发
KeyError
异常。
......
与Alex Martelli共进午餐时,他建议创建一个字典子类(但用C实现)具有此行为,这将成为语言的一个很好的补充。看起来很容易实现。它可以是一个内置的命名为
defaultdict
。构造函数的第一个必需参数应该是默认值。其余参数(甚至关键字参数)传递给字典构造函数时不变。
讨论很快从
defaultdict
成为内置对象转移到了它成为
collections
模块的一部分,但全小写的名称仍然保留。这次讨论发生在2006年,所以PEP 8当时已经存在多年了。不确定为什么当时没有想到将其命名为
DefaultDict
。
import pickle
,这会委托给可用的 C 实现_pickle
进行导入。 - roippicOrderedDict
的补丁。C版本和Python版本都将通过相同的名称导入这一事实是无关紧要的。defaultdict
和OrderedDict
的命名约定仍然不匹配。 - Luciano Ramalho