Python表示法?

时间:2009-07-21 20:47:24

标签: python naming-conventions notation

我刚刚开始使用Python,我正在考虑应该使用哪种表示法。我已经阅读了有关Python符号的PEP 8指南,我同意除了函数名称之外的大多数内容(我更喜欢使用mixedCase样式)。

在C ++中,我使用匈牙利表示法的修改版本,其中我不包含有关类型的信息,但仅包含变量的范围(例如,对于局部变量为lVariable,对于类的成员变量为mVariable,g用于全局,s用于静态,用于函数的输入和用于函数的输出。)

我不知道这种符号样式是否有名称,但我想知道在Python中不使用这种符号样式是否是个好主意。我对Python并不是非常熟悉所以你们/ gals可能会看到我无法想象的问题。

我也有兴趣看看你对它的看法一般:)有些人可能会说这会使代码的可读性降低,但我已经习惯了它而且没有这些标签的代码就是代码少了对我来说可读。

6 个答案:

答案 0 :(得分:8)

  

几乎每个Python程序员都会说它会让代码的可读性降低,但我已经习惯了,没有这些标签而编写的代码就是对我来说不太可读的代码)

FTFY。

但是说真的,它会帮助你,但会让那些试图阅读你代码的Python程序员感到困惑和烦恼。

由于Python本身的工作方式,这也不是必需的。例如,你永远不会需要你的“mVariable”形式,因为它在Python中很明显:

class Example(object):
    def__init__(self):
        self.my_member_var = "Hello"

    def sample(self):
        print self.my_member_var

e = Example()
e.sample()
print e.my_member_var

无论您如何访问成员变量(使用self.foomyinstance.foo),总是很清楚它是成员。

其他情况可能不那么明显,但如果你的代码不够简单,读者可以记住“'name'变量是一个参数”,在阅读函数时你可能做错了什么

答案 1 :(得分:7)

使用PEP-8。它在Python世界中几乎是通用的。

答案 2 :(得分:4)

我在代码中违反了PEP8。我用:

  • 用于方法和函数的lowercaseCamelCase
  • _prefixedWithUnderscoreLowercaseCamelCase for“private”methods
  • underscore_spaced for variables(any)
  • _prefixed_with_underscore_variables为“私人”自变量(属性)
  • 类和模块的CapitalizedCamelCase(虽然我转向使用lowercasedmodules)

我从不喜欢匈牙利的记谱法。变量名称应该简单明了,提供足够的信息以清楚它在哪里(在哪个范围内)使用它的目的是什么,易于阅读,关注它所指的含义,而不是它的技术mumbo-jumbo(例如,类型)。

我违规行为背后的原因是出于实际考虑和以往的经验。

  • 在C ++和Java中,传统上有类的CapitalizedCamel和成员函数的lowercaseCamel。
  • 我在一个代码库上工作,其中下划线前缀用于表示私有但不是那么多私有。我们不想弄乱python名称mangling(双下划线)。这使我们有机会在单元测试期间违反一些手续并偷看内部阶级状态。

答案 3 :(得分:3)

您可以针对您的代码运行一个方便的pep-8合规性脚本:

http://github.com/cburroughs/pep8.py/tree/master

答案 4 :(得分:2)

这取决于项目和目标受众。

如果您正在构建开源应用程序/插件/库,请坚持使用PEP指南。

如果这是贵公司的项目,请遵守公司惯例或类似内容。

如果这是您自己的个人项目,那么请使用常规方法,使您可以轻松使用。

我希望这是有道理的。

答案 5 :(得分:1)

您应该在自己的代码中与命名约定保持一致。但是,如果您打算将代码发布给其他开发人员,则应坚持使用PEP-8。

例如,当您拥有一个协作项目时,4个空格与1个选项卡是一个大问题。人们使用选项卡将代码提交到源存储库需要开发人员不断争论空白问题(在Python中这是一个很大的交易)。

Python和所有语言都有首选约定。你应该学习它们。

Java喜欢mixedCaseStuff。

C喜欢szHungarianNotation。

Python更喜欢stuff_with_underscores。

您可以使用_python_type_function_names编写Java代码 你可以用javaStyleMixedCaseFunctionNamesThatAreSupposedToBeReallyExplict编写Python代码

只要你的一致:p