实际选择Python中的单词的命名约定,符合PEP8

时间:2009-10-14 00:21:52

标签: python naming-conventions

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

是的,我知道

  

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

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

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

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

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

我想我正在寻找的不仅仅是前缀/ root / tag / suffix应该做什么(Spolsky文章中对于匈牙利应用程序的部分内容),但是(很多)每个例子,或者规则为生成每个。

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:2)

请记住,在英语中,当两个含糊不清的单词彼此相邻时,第一个成为描述第二个单词的形容词。尝试坚持这个规则,并始终用两个组件命名,第一个组件描述第二个组件。

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

下一个规则就是这个词。这是一个很好的短语,所以请不要遗漏。多元化也是如此。过去时结束于-ed或-d。也许甚至是 - 。

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

说英语的读者在单词的末尾以及短语的中间对-s和-d非常敏感,所以不要假设会遗漏这么短的文本。这是不太可能的,因为我们从很小的时候开始编程,注意到一些单词结尾。

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

答案 2 :(得分:1)

宇宙是多维的。

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

“总计”,“计数”,“列中”,“在表格中”

“当前”,“索引”,“”,“一列”

“当前”,“列”,“”,“”

“Sum”,“Of Something”,“”,“In a Column”

大鼠。这是不规则的。

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

更糟糕的是,我们可能会遇到一件非常复杂的事情。 “Total”,“Count”,“Non-Underscore”,“Columns”,“In Tables”,“With the Length-Length Names”,“From a Dictionary”,“Keyed by”,“Mother's Maiden Name”。< / p>

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

继续尝试。在有人找到反例之前,这总是很有趣和游戏。

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