Python中变量和函数的命名约定是什么?

来自C#背景的变量和方法名称的命名约定通常是camelCase或PascalCase:

// C# examplestring thisIsMyVariable = "a"public void ThisIsMyMethod()

在Python中,我已经看到了上面的内容,但我也看到了使用下划线:

# python examplethis_is_my_variable = 'a'def this_is_my_function():

有没有更可取的、明确的Python编码风格?

687703 次浏览

请参阅PythonPEP 8:函数和变量名

函数名称应根据需要为小写,单词用下划线分隔,以提高易读性。

变量名遵循与函数名相同的约定。

混合案例仅在已经是流行样式的上下文中被允许(例如threading.py),以保持向后兼容性。

编码风格通常是组织内部政策/惯例标准的一部分,但我认为一般来说,all_lower_case_underscore_separator风格(也称为snake_case)在python中最常见。

正如其他答案所示,有PEP 8,但PEP 8只是标准库的样式指南,它只被认为是其中的福音。对于其他代码,PEP 8最常见的偏差之一是变量命名,特别是对于方法。没有单一的主导风格,尽管考虑到使用MixedCase的代码量,如果进行严格的人口普查,最终可能会得到带有MixedCase的PEP 8版本。与PEP 8的其他偏差很少是很常见的。

大多数python人更喜欢下划线,但即使我使用python已经5年多了,我仍然不喜欢它们。对我来说,它们看起来很丑,但也许这就是我脑海中的Java。

我只是更喜欢CamelCase,因为它更适合类的命名方式,SomeClass.doSomething()SomeClass.do_something()感觉更合乎逻辑。如果你在python的全局模块索引中环顾四周,你会发现两者都有,这是因为它是一个来自各种来源的库的集合,随着时间的推移而增长,而不是像Sun这样由一家公司开发的有严格编码规则的东西。我想说的底线是:更好地使用你喜欢的任何东西,这只是个人品味的问题。

就我个人而言,我尝试在类、混合方法和函数中使用CamelCase。变量通常是下划线分隔的(当我记得的时候)。这样我就可以一眼看出我到底在调用什么,而不是一切看起来都一样。

David Goodger(在“Code like a Pythonista”这里中)将PEP 8建议描述如下:

  • joined_lower用于函数、方法、属性,变量

  • joined_lowerALL_CAPS常量

  • StudlyCaps

  • camelCase只符合已有约定

通常,遵循语言标准库中使用的约定。

如前所述,PEP 8说对变量、方法和函数使用lower_case_with_underscores

我更喜欢将lower_case_with_underscores用于变量,将mixedCase用于方法和函数,这使得代码更加显式和可读。因此,遵循Python的禅“显式优于隐式”和“可读性很重要”

正如Python代码风格指南所承认的,

Python的命名约定图书馆有点乱,所以我们永远不会完全一致

请注意,这仅指Python的标准库。如果他们不能获得的一致性,那么对于所有 Python代码来说,几乎没有希望有一个普遍遵守的约定,是吗?

从这一点以及这里的讨论,我可以推断,如果一个人在过渡到Python时继续使用例如Java或C#(明确且完善的)变量和函数的命名约定,这是一个可怕的罪过。当然,请记住,最好遵守代码库/项目/团队的流行风格。正如Python风格指南指出的那样,内部一致性最重要。

请随意将我视为异教徒。:-)就像OP一样,我不是“Pythonista”,无论如何还没有。

Google Python风格指南有以下约定:

module_namepackage_nameClassNamemethod_nameExceptionNamefunction_nameGLOBAL_CONSTANT_NAMEglobal_var_nameinstance_var_namefunction_parameter_namepackage_name0。

类似的命名方案应该应用于CLASS_CONSTANT_NAME

有一篇关于这个的文章:http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf

太长别读它说snake_case比camelCase更具可读性。这就是为什么现代语言尽可能地使用(或应该使用)蛇。

除了@JohnTESlade的回答,Google的python风格指南有一些非常简洁的建议,

要避免的名字

  • 单字符名称,计数器或迭代器除外
  • 任何包/模块名称中的破折号(-)
  • \__double_leading_and_trailing_underscore__ names(由Python保留)

命名约定

  • “内部”是指模块内部或类内的受保护或私有。
  • 前置单下划线(_)对保护模块变量和函数(不包括在导入*from中)有一些支持。前置双下划线(__)到实例变量或方法有效地使变量或方法对其类私有(使用名称修改)。
  • 将相关的类和顶层函数放在一个模块中,不像Java,你不需要一个模块只能有一个类。
  • 类名使用CapWords,模块名使用lower_with_under.py。尽管有许多现有模块命名为CapWords.py,但现在不鼓励这样做,因为当模块碰巧以类命名时会引起混淆。(“等等——我写的是import StringIO还是from StringIO import StringIO?”)

来自Guido建议的指导方针输入图片描述

我个人在其他编程语言开发时使用Java的命名约定,因为它是一致且易于遵循的。这样我就不会一直为使用什么约定而苦苦挣扎,这不应该是我项目中最难的部分!

列宁告诉我,我也来自Java /C世界,SQL。仔细检查自己,试图找到第一眼就可以理解的复杂结构的例子,比如列表字典中的列表,其中一切都是对象。至于我-camelCase或其变体应该成为任何语言的标准。下划线应该保留给复杂的句子。

无论是在课堂上还是在课堂外

变量和函数是小写,如下所示:

name = "John"
def display(name):print("John")

如果它们多于一个单词,则用强调“_”分隔,如下所示:

first_name = "John"
def display_first_name(first_name):print(first_name)

而且,如果变量是常量,则为大写,如下所示:

FIRST_NAME = "John"