为什么采用下划线小写命名规范?
根据你的理解,这个问题可能是个修辞问题,也可能不是,但我真的很困惑。这种命名规则有什么意义呢?我知道命名规则不一定要有特别的理由,但为什么要偏离已经很流行的 camelCase 呢?难道我错过了关于 lower_case_with_underscores
的某些理由吗?(是的,我已经完整阅读了 PEP 8,也明白这只是一个提议、一个指南等等。)
我真正想问的是:我正在写一个 Python 库。实际上,如果运气好的话,这个库可能会比我其他的项目大得多。我已经尽量遵循 PEP 8 的规范,到目前为止,我在函数和方法名称上也保持了 lower_case_with_underscores
,正如 PEP 8 所指示的。但让我烦恼的是,我得记得在 Twisted 中用 camelCase,在 logging
中用 camelCase,还有其他几乎所有的地方也要用。我应该用什么命名规则,为什么?
可能会让人惊讶的是,我竟然对命名这么在意,甚至写了这么长的问题,连我自己都觉得惊讶。也许我在这方面有点强迫症。我对这个问题没有太多“个人看法”,更多的是倾向于使用最常见的方式,而在这种情况下,就是 camelCase——但我更烦的是发现我可能违反了一些关于显式与隐式、还有 Python 的一些基本原则的“永恒法则”。
10 个回答
我听说过,在其他情况下,带下划线的单词(比如 words_with_underscores)对非英语母语的读者来说,比驼峰式命名(比如 wordByCamelCase)更容易分辨。因为从视觉上看,带下划线的单词更容易让人理解和区分出不同的单词。
使用小写字母加下划线的方式更好,因为你在书本或报纸上通常看到的文字不是这样写的。
camelCase
和 CamelCase
(这本身就是个争论;-) 在你熟悉的环境中可能是最流行的写法,但这并不意味着它们是通用的——难道你从未听说过一种叫做 C++ 的冷门语言吗?它里面有 std::find_first_of
和 std::replace_copy_if
这样的算法等等?
所以你说的 PEP 8 里没有“偏离”,其实只是选择了 C++ 的标准写法,而不是 Java 或 C# 中更流行的写法。
至于你自己的代码该怎么写,选一个风格并坚持下去就行——保持一致性比其他考虑更重要。我的公司在所有语言的内部代码中都使用 CamelCase
风格(不过在公开 API 的时候不一定这样,这是另一个问题),我个人非常不喜欢这种写法(我真希望能消灭编程世界中对大小写敏感的所有依赖!),但我还是遵循这个规则,并在代码审查中帮助维护它,因为统一性确实很重要。
我想你只有在需要依赖屏幕阅读器来读代码时,才会明白依赖大小写敏感是个糟糕的主意——大多数屏幕阅读器在处理大小写问题时表现得很糟糕,而且没有什么好的方法或简单的规则可以把大小写的差异转化为容易听懂的提示(而把下划线转成“点击声”,在一个好的可配置的屏幕阅读器中就简单多了)。对于那些没有任何视觉障碍的人来说,肯定有90%或更多的人,你不需要太在意(除非你想包容一下那些没有你完美视力的人……算了,谁在乎这些人呢?对吧?!)。
不过,一致性仍然很重要,能帮助到每一个人。