3

我刚刚开始使用 Python,我正在考虑应该使用哪种表示法。我已经阅读了关于 Python 符号的PEP 8指南,并且我同意其中的大多数内容,除了函数名称(我更喜欢混合大小写样式)。

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

我不知道这种符号风格是否有名字,但我想知道在 Python 中不使用这种符号风格是否是个好主意。我对 Python 不是很熟悉,所以你们可能会看到我还无法想象的问题。

我也很想看看你对它的总体看法:) 有些人可能会说它使代码的可读性降低,但我已经习惯了,没有这些标签的代码对我来说可读性较差.

4

6 回答 6

8

几乎每个 Python 程序员都会说它使代码的可读性降低,但我已经习惯了,没有这些标签的代码对我来说可读性较差)

自由贸易区。

不过说真的,它会帮助你,但会让其他试图阅读你的代码的 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.fooor myinstance.foo),始终清楚它是一个成员。

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

于 2009-07-21T20:55:07.240 回答
7

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

于 2009-07-21T23:16:28.610 回答
4

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

  • 方法和函数的小写CamelCase
  • _prefixedWithUnderscoreLowercaseCamelCase 用于“私有”方法
  • underscore_spaced 用于变量(任何)
  • _prefixed_with_underscore_variables 用于“私有”自变量(属性)
  • CapitalizedCamelCase 用于类和模块(虽然我正在转向小写模块)

我从不喜欢匈牙利符号。变量名应该简单明了,提供足够的信息以明确它在哪里(在哪个范围内)使用以及它的目的是什么,易于阅读,关注它所指的含义,而不是它的技术大头贴(例如类型)。

我违规的原因是出于实际考虑和以前的经验。

  • 在 C++ 和 Java 中,传统的做法是对类使用 CapitalizedCamel,对成员函数使用小写骆驼。
  • 我在一个代码库中工作,其中下划线前缀用于表示私有但不是那么私有。我们不想弄乱 python 名称修饰(双下划线)。这让我们有机会在单元测试期间稍微违反形式并查看内部类状态。
于 2009-07-21T20:55:35.977 回答
3

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

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

于 2009-07-21T23:26:15.533 回答
2

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

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

如果这是您公司的项目,请遵守公司惯例或类似的东西。

如果这是您自己的个人项目,那么请使用对您而言流畅且易于使用的约定。

我希望这是有道理的。

于 2009-07-21T20:52:16.967 回答
1

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

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

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

Java 喜欢混合大小写。

C 喜欢 szHungarianNotation。

Python 更喜欢 stuff_with_underscores。

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

只要你的一致:p

于 2009-07-22T13:36:39.720 回答