【问题标题】:Naming convention in Collections: why are some lowercase and others CapWords?集合中的命名约定:为什么有些是小写而有些是 CapWords?
【发布时间】:2017-05-05 18:18:39
【问题描述】:

为什么要混合使用小写和大写驼峰式?

namedtuple
deque   
Counter 
OrderedDict
defaultdict

为什么是collections 而不是Collections

例如,我有时会这样做:

from collections import default_dict

错了。我可以使用什么经验法则来避免将来出现此类错误?

【问题讨论】:

    标签: python


    【解决方案1】:

    集合模块遵循PEP 8 Style Guide:

    模块应该有简短的全小写名称。

    这就是为什么它是collections


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

    这就是CounterOrderedDict 的原因,因为它们都是类:

    >>> collections.Counter
    <class 'collections.Counter'>
    >>> collections.OrderedDict
    <class 'collections.OrderedDict'>
    

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

    >>> collections.deque
    <type 'collections.deque'>
    >>> collections.namedtuple
    <function namedtuple at 0x10070f140>
    >>> collections.defaultdict
    <type 'collections.defaultdict'>
    

    注意:在 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'>
    

    我假设他们保留 defaultdictdeque 小写以实现向后兼容性。我无法想象他们会为了风格指南做出如此剧烈的名称更改。

    【讨论】:

    • 既然类和类型应该是统一的,那么 Python 类的 CamelCase 和 C 类型的小写之间的区别令人沮丧。
    • 为什么类型和类的风格不同?当我使用 Counter 是一个类而 defaultdict 是一个类型时,我应该关心它们吗?换句话说,直到现在我才关心 defaultdict 是一个类型而不是一个类的事实。我应该关心吗?
    • @Baz 我自己不在乎。在某些情况下它们是相似的,但话又说回来,你和我是不同的人。为什么类型和类的风格不同?嗯,我不知道。 PEP 8 似乎没有涵盖类型。
    • @Baz:在类型/类统一之前,差异曾经非常重要。现在类型/类统一已经有 16 年了,差异很小,不同的命名约定只是令人讨厌的历史遗物。
    • 但他们可以添加别名 DefaultDictDeque 以保持一致性。
    猜你喜欢
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    相关资源
    最近更新 更多