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

时间:2008-10-01 21:01:17

标签: python variables function naming-conventions

来自C#背景,变量和方法名称的命名约定通常是CamelCase或Pascal Case:

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

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

# python example
this_is_my_variable = 'a'
def this_is_my_function():

Python有更优选的,明确的编码风格吗?

13 个答案:

答案 0 :(得分:771)

请参阅Python PEP 8

  

函数名称应为小写,   用下划线分隔的单词为   提高可读性所必需的。

     

仅在上下文中允许使用mixedCase   那已经很普遍了   式

变量...

  

使用功能命名规则:   小写,单词分隔   强调必要的强调   可读性。

就我个人而言,我偏离了这一点,因为对于我自己的项目,我也更喜欢mixedCase而不是lower_case

答案 1 :(得分:595)

Google Python Style Guide具有以下约定:

  

module_name,package_name,ClassName,method_name,ExceptionName,   function_name,GLOBAL_CONSTANT_NAME,global_var_name,   instance_var_name,function_parameter_name,local_var_name

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

答案 2 :(得分:218)

David Goodger(在“Code like a Pythonista”here中)描述了PEP 8的建议如下:

  • joined_lower了解函数,方法, 属性,变量

  • joined_lowerALL_CAPS代表 常数

  • StudlyCaps用于课程

  • camelCase只是为了顺从 已有的惯例

答案 3 :(得分:38)

Style Guide for Python Code承认,

  

Python的命名约定   图书馆有点乱,所以我们会   从来没有完全一致

请注意,这仅指Python的标准库。如果他们无法那个一致,那么所有 Python代码的约定几乎没有什么希望呢?

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

随意将我视为异教徒。 :-)和OP一样,我不是“Pythonista”,不管怎么说。

答案 4 :(得分:32)

正如其他答案所示,有PEP 8,但PEP 8只是标准库的样式指南,并且它仅作为福音。 PEP 8对其他代码的最常见偏差之一是变量命名,特别是对于方法。没有单一的主导风格,虽然考虑到使用mixedCase的代码量,如果要进行严格的人口普查,最终可能会得到一个带有mixedCase的PEP 8版本。 PEP 8几乎没有其他偏差,这很常见。

答案 5 :(得分:29)

如前所述,PEP 8表示将lower_case_with_underscores用于变量,方法和函数。

我更喜欢将lower_case_with_underscores用于变量,mixedCase用于方法和函数,使代码更加清晰可读。因此,遵循Zen of Python's“显式优于隐式”和“可读性计数”

答案 6 :(得分:17)

我个人尝试将CamelCase用于类,mixedCase方法和函数。变量通常是下划线(当我记得时)。通过这种方式,我可以一眼就看出我究竟在呼唤什么,而不是一切看起来都一样。

答案 7 :(得分:15)

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

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

答案 8 :(得分:14)

@JohnTESlade回答的内容。 Google's python style guide有一些非常简洁的建议,

应避免使用的名称

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

命名约定

  • “内部”是指模块内部或类中受保护或私有的内部。
  • 使用单个下划线(_)可以保护模块变量和函数(不包括import * from)。在实例变量或方法前加双下划线(__)可以有效地使变量或方法对其类具有私有性(使用名称修饰)。
  • 将相关的类和顶级功能放到一个模块中。与Java不同,不需要将自己限制为每个模块一个类。
  • CapWords用于类名,将lower_with_under.py用于模块名。尽管有许多名为CapWords.py的现有模块,但现在不建议这样做,因为当该模块恰巧以类命名时会引起混淆。 (“等待-我写了import StringIO还是from StringIO import StringIO?”)

从Guido的建议中得出的指南 enter image description here

答案 9 :(得分:8)

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

TL; DR它说snake_case比camelCase更具可读性。这就是现代语言在任何可能的地方使用(或应该使用)蛇的原因。

答案 10 :(得分:3)

编码风格通常是组织内部策略/约定标准的一部分,但我认为通常,all_lower_case_underscore_separator样式(也称为snake_case)在python中最常见。

答案 11 :(得分:0)

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

答案 12 :(得分:0)

在以其他编程语言进行开发时,我个人使用Java的命名约定,因为它一致且易于遵循。这样,我就不会一直在努力使用哪些约定不应该成为我项目中最难的部分!