来自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有更优选的,明确的编码风格吗?
请参阅Python PEP 8.
函数名称应为小写,并根据需要用下划线分隔,以提高可读性.
只有在已经成为流行风格的情境中才允许使用mixedCase
变量...
使用函数命名规则:小写,必要时用下划线分隔,以提高可读性.
就个人而言,我与此不同,因为我也喜欢mixedCase
过lower_case
我自己的项目.
Google Python样式指南具有以下约定:
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
类似的命名方案应该应用于a CLASS_CONSTANT_NAME
大卫·Goodger(在"代码就像Pythonista" 在这里)描述了PEP 8项建议如下:
joined_lower
用于函数,方法,属性,变量
joined_lower
或者ALL_CAPS
常数
StudlyCaps
对于课程
camelCase
只是为了符合已有的惯例
正如Python Code的样式指南所承认的那样,
Python库的命名约定有点混乱,所以我们永远不会完全一致
请注意,这仅指Python的标准库.如果他们不能得到那种一致性,那么几乎没有希望对所有 Python代码都有一个普遍遵守的约定,是吗?
从那里开始,在这里讨论,我会推断,如果在跨越Python时继续使用例如Java或C#(明确且完善的)变量和函数的命名约定,这不是一个可怕的罪.当然,请记住,最好遵守代码库/项目/团队的主流风格.正如Python样式指南所指出的那样,内部一致性最重要.
随意将我视为异教徒.:-)和OP一样,我不是"Pythonista",不管怎样.
正如其他答案所示,有PEP 8,但PEP 8只是标准库的样式指南,并且它仅作为福音.PEP 8对其他代码的最常见偏差之一是变量命名,特别是对于方法.没有单一的主导风格,虽然考虑到使用mixedCase的代码量,如果要进行严格的人口普查,最终可能会得到一个带有mixedCase的PEP 8版本.PEP 8几乎没有其他偏差,这很常见.
如上所述,PEP 8表示lower_case_with_underscores
用于变量,方法和功能.
我更喜欢使用lower_case_with_underscores
变量,mixedCase
方法和函数使代码更加明确和可读.因此遵循Python的禅宗 "明确比隐含更好"和"可读性计数"
进一步了解@JohnTESlade所回答的问题.谷歌的python风格指南有一些非常好的建议,
要避免的名称
除计数器或迭代器之外的单个字符名称
任何包/模块名称中的破折号( - )
\__double_leading_and_trailing_underscore__ names
(由Python保留)
命名惯例
"内部"表示模块内部或类中受保护或私有.
预先设置单个下划线(_)对保护模块变量和函数(不包含在import*中)有一些支持.将双下划线(__)预先添加到实例变量或方法有效地使变量或方法对其类是私有的(使用名称修改).
将相关类和顶级函数放在一个模块中.与Java不同,不需要将每个模块限制为一个类.
使用CapWords
类的名字,但lower_with_under.py
对模块名称.尽管有许多现有的模块被命名CapWords.py
,但现在不鼓励这样做,因为当模块恰好以类命名时,它会让人感到困惑.("等等 - 我写了import StringIO
还是from StringIO import StringIO
?")
来自Guido建议书的指南
我个人尝试将CamelCase用于类,mixedCase方法和函数.变量通常是下划线(当我记得时).通过这种方式,我可以一目了然地告诉我究竟是在呼唤什么,而不是一切看起来都一样.
大多数python人喜欢下划线,但即使我使用python已经超过5年了,我仍然不喜欢它们.他们看起来很难看,但也许这就是我头脑中的Java.
我只是喜欢驼峰更好,因为它适合与类的命名方式更好,感觉更符合逻辑具有SomeClass.doSomething()
比SomeClass.do_something()
.如果你在python中查看全局模块索引,你会发现两者,这是因为它是来自各种来源的库的集合,这些库随着时间的推移而增长,而不是像Sun这样的公司用严格的编码规则开发的东西. .我会说底线是:使用你喜欢的任何东西,这只是个人品味的问题.
有一篇关于此的论文:http://www.cs.kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf
TL; DR它说snake_case比camelCase更具可读性.这就是现代语言在任何可能的地方使用(或应该使用)蛇的原因.