【问题标题】:Naming convention for actually choosing the words in Python, PEP8 compliant在 Python 中实际选择单词的命名约定,符合 PEP8
【发布时间】:2009-10-14 00:21:52
【问题描述】:

我正在寻找一种更好的方法来命名 Python 中的所有内容。是的,我读过PEP8Spolsky’s wonderful rant 和其他各种文章。但我正在寻找更多关于选择实际单词的指导。

是的,我知道

愚蠢的一致性是妖精 小心灵。

但是,您可以与 PEP8 等保持一致,但仍然没有易于记忆的一致变量/方法/类名称。一致,我的意思是,如果你两次被提出相同的决定,你会产生相同的名字。

例如,有多种符合 PEP8 的方式来命名以下项目:

  • 表格中的列数
  • 当前列号
  • 列对象
  • 列总和

是的,当然,很容易决定使用 num_colcount_col 而不是 col_numcol_count(或 v.v.)。但是,我希望看到一个随着时间的推移进行了一些测试/改进的示例。我经常从一个给定的约定开始,然后当我冒险进入一个新领域时它开始崩溃。

我想我正在寻找的不仅是前缀/根/标签/后缀应该做什么(在 Spolsky 文章中为 Apps Hungarian 部分介绍过),而且每个示例的(许多)示例,或规则生成每个。

【问题讨论】:

    标签: python naming-conventions


    【解决方案1】:

    我相信,对复杂变量命名约定的需求会随着良好的面向对象设计而消失。在 Spolsky 的文章中,主要关注变量命名如何帮助防止错误。我相信当您在同一范围内有许多变量时,这些错误会更频繁地发生;这可以通过将数据分组到对象中来避免 - 然后,单个命名上下文将只有几个变量,不需要组合名称。

    命名约定的另一个目的是更好地记住名称。同样,面向对象也有帮助(通过向从外部看的用户隐藏大量数据);然后你需要的是命名方法的约定,而不是数据。此外,工具可以帮助您提供在特定范围内可用的名称列表(同样,这些工具依赖于面向对象来完成它们的工作)。

    在您的具体示例中,如果 column 是一个对象,我希望 len(table) 给我一个表中的列数,sum(column)column.sum() 给我它的总和;而当前列只是 for 循环中的变量(通常是 ccolumn)。

    【讨论】:

    • 关于在任何给定范围内尽量减少变量数量的好点。它当然有帮助,但正如您所指出的,方法命名仍然是一个问题。尤其是在使用很长时间未使用的模块时。一个好的 IDE 只能提供这么多帮助。
    【解决方案2】:

    请记住,在英语中,当两个模棱两可的词彼此相邻时,第一个词成为描述第二个词的形容词。尝试遵守此规则,并始终使用两个组件命名事物,其中第一个组件描述第二个组件。

    例如 col_num 是一个数字。什么样的号码?列号。

    下一条规则是这个词。这是一个很好的简短词,所以请不要遗漏它。复数也是如此。过去时以-ed 或-d 结尾。甚至可能-ing。

    例如,num_col 是一个列。哪一种?一个数字列。如果你真的想引用列数,你应该写 num_of_cols。接收日期是 recd_date 或 rcvd_date,而不是 rec_date 或 rcv_date。

    说英语的读者对词尾和短语中间的 -s 和 -d 非常敏感,所以不要以为会错过这么短的文本。这是不太可能的,因为我们从很小的时候就被编程为注意到少数词尾。

    尽量保持一致性,并保留您使用的任何单词或单词片段的词汇表或数据字典。不要将相同的片段用于两个不同的事物。如果您使用 recd 来表示收到,并且您需要一个变量名来记录,那么要么将其完整地写出来,要么想出一个新的缩写并将其放入词汇表中。如果您使用关系数据库,请尽量与那里使用的命名约定保持一致。让 dba 知道您在做什么,并告诉他们在哪里可以找到您的词汇表。

    【讨论】:

      【解决方案3】:

      宇宙是多维的。

      每个变量名至少有两个维度。

      “总计”、“计数”、“列数”、“在表中”

      “当前”、“索引”、“”、“列的”

      “当前”、“列”、“”、“”

      “总和”、“某物”、“”、“列中”

      老鼠。这是不规则的。

      更糟糕的是,我们可以选择任何东西作为“主要”维度,并选择任何其他特征序列作为“次要”维度。

      更糟糕的是,我们可能有一个真正复杂的东西。 “总计”、“计数”、“非下划线”、“列”、“在表中”、“具有偶数长度的名称”、“来自字典”、“键入者”、“母亲的娘家姓”。

      坦率地说,没有可能的变量名称架构以系统、可重复的形式包含“所有”知识。

      尽管如此,请继续努力。在有人找到反例之前,它总是很有趣和游戏。

      您可以继续尝试,也可以简单地使用简单明了的名称。如果您的名称范围很小(例如,一个小的方法函数),则没有什么可“记住”的。这在构成方法函数的 20 行代码中完全可见。

      【讨论】:

        猜你喜欢
        • 2020-11-04
        • 2018-12-20
        • 1970-01-01
        • 2020-01-14
        • 2011-02-26
        • 2014-09-08
        • 2018-03-08
        • 2013-10-16
        • 2010-09-15
        相关资源
        最近更新 更多