集合中的命名约定:为什么有些小写和其他CapWords?

Baz*_*Baz 14 python

为什么小写和UpperCamelCase的混合?

namedtuple
deque   
Counter 
OrderedDict
defaultdict
Run Code Online (Sandbox Code Playgroud)

为什么collections而不是Collections

我有时会这样做:

from collections import default_dict
Run Code Online (Sandbox Code Playgroud)

因为失误.我可以使用什么经验法则来避免将来出现这样的错误?

Ter*_*ryA 9

馆藏模块遵循PEP 8样式指南:

模块应具有简短的全小写名称.

这就是为什么 collections


几乎无一例外,类名使用CapWords约定.

这就是为什么它CounterOrderedDict,因为他们是两个类:

>>> collections.Counter
<class 'collections.Counter'>
>>> collections.OrderedDict
<class 'collections.OrderedDict'>
Run Code Online (Sandbox Code Playgroud)

namedtuple是一个函数,所以它不遵循上面提到的样式指南.dequedefaultdicts是类型,所以它们也不是:

>>> collections.deque
<type 'collections.deque'>
>>> collections.namedtuple
<function namedtuple at 0x10070f140>
>>> collections.defaultdict
<type 'collections.defaultdict'>
Run Code Online (Sandbox Code Playgroud)

注意:使用Python 3.5,defaultdict和deque现在也是类:

>>> import collections
>>> collections.Counter
<class 'collections.Counter'>
>>> collections.OrderedDict
<class 'collections.OrderedDict'>
>>> collections.defaultdict
<class 'collections.defaultdict'>
>>> collections.deque
<class 'collections.deque'>
Run Code Online (Sandbox Code Playgroud)

我以为他们不停地defaultdictdeque小写的向后兼容性.我不认为他们会为了风格指南而做出如此大的改名.

  • 既然类和类型应该统一,那么CamelCase for Python类和C类小写的区别令人沮丧. (6认同)
  • 为什么不同类型和类的样式?我是否应该关心Counter是一个类的事实,当我使用它时,defaultdict是一种类型?换句话说,直到现在我还没有关心defaultdict是一个类型而不是一个类的事实.我应该关心吗? (2认同)
  • 但他们可以添加别名“DefaultDict”和“Deque”以保持一致性。 (2认同)