Python 的通用编码风格?
-
26-09-2019 - |
题
我对 Python 还很陌生,我想开发我的第一个严肃的开源项目。我想问一下python项目常见的编码风格是什么。我也会写下我现在正在做的事情。
1.- 最广泛使用的列宽是多少?(永恒的问题)
我目前坚持 80 列(这很痛苦!)
2.- 使用什么引言?(我已经看到了所有内容,PEP 8 没有提到任何明确的内容)
除了文档字符串之外,我对所有内容都使用单引号,文档字符串使用三个双引号。
3.- 我应该把导入的东西放在哪里?
我将它们按此顺序放在文件头中。
import sys
import -rest of python modules needed-
import whatever
import -rest of application modules-
<code here>
4.- 我可以使用“导入whatever.function”吗 作为 巴拉”?
我看到一些文件忽略了这样做。
5.- 用于缩进的制表符或空格?
当前使用 4 个空格制表符。
6.- 变量命名风格?我对除类之外的所有内容都使用小写,并将其放入驼峰式命名法中。
你有什么可以推荐的吗?
解决方案
PEP 8 是所有常见样式几乎“根”的导板。
谷歌的 Python的风格指南有都相当周全一些地区的,但其他人的特质(这两个空间缩进,而不是流行的四个空间的,以及函数和方法,而不是camel_case风格的首字母大写的风格,是非常重大的特质)。
在您的具体问题:
1.-什么是最广泛使用的列宽? (永恒的问题) 我目前坚持80列 (这是一个痛!)
80列是最流行的
2:什么引用使用? (我已经看到了一切,PEP 8没有提及 任何明确的)我使用的是单 对于一切,但文档字符串报价, 它们使用三重双引号。
我更喜欢你正在使用的样式,但即使是谷歌无法达成关于这样的共识: - (
3 .-我在哪里把我的进口?我把他们的文件头在这 顺序。
进口SYS导入-rest蟒 需要的模块 -
进口任何导入-rest的 应用模块 -
是,很好的选择,和受欢迎。
4.-我可以用“进口whatever.function为嗒嗒”?我看到一些 文档无视这样做。
我强烈建议你总是进口模块 - 没有具体的名字从一个模块内。这不只是风格 - 有很强的优势,例如在这样做可测试性。所述as
子句是好的,缩短模块的名称或避免冲突。
5.-制表符或空格缩进?目前使用的4个标签。
压倒性最流行的。
6.-变量命名风格?我使用的是小写的一切,但班, 我把在驼峰。
几乎每个人的名字的类与大写初始和常数与全部大写的。
其他提示
1.-大多数人都具有16:现在9或16:10监视器天。即使他们没有一个宽屏幕,他们有很多的像素,80周的cols是不是一个大的实际大忌,就像是当每个人都在命令行中远程终端窗口,黑客在4:3显示器320×240。我通常最终线的时候变得很长,这是主观的。我在2048×1152上的23" 监视器X 2
2:默认情况下的单引号,所以你不必当你需要嵌入单引号和三重引号与嵌入式换行符的字符串逃脱双引号,双引号。
3 .-将它们放在文件的顶部,有时候你把他们在主功能,如果全球范围内不需要的模块他们。
4.-这是一个常见的成语重命名一些模块。一个很好的例子是以下内容。
try:
# for Python 2.6.x
import json
except ImportError:
# for previous Pythons
try:
import simplejson as json
except ImportError:
sys.exit('easy_install simplejson')
但导入只是类或函数的首选方法是from module import xxx
与可选as yyy
如果需要
5.-始终使用空格! 2或4只要没有TABS
6.-类应起来UpperCaseCamelStyle,变量小写有时lowerCamelCase或有时all_lowecase_separated_by_underscores,因为是函数名。 “常量” 应ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES
当在疑问参阅 PEP 8 ,Python的源,现有公约在代码库。但大多数的重要的是要的内部一致越好。 所有Python代码看起来应该像,它是由同一个人当过可能的。的
由于我对“样式”非常着迷,所以我将写下我目前在一个近 8k SLOC 项目中使用的指南,该项目包含大约 35 个文件,其中大部分与 PEP8 匹配。
PEP8 说 79(WTF?),我选择 80,现在已经习惯了。毕竟眼球运动少了!
文档字符串和跨越 ''' 中多行的内容。其他一切都在
''
. 。另外我不喜欢双引号,我一直只使用单引号......我猜那是因为我来自 JavaScript 角落,在那里使用 '' 更容易,因为这样你就不必转义所有 HTML 内容:O在头部,在自定义应用程序代码之前内置。但我也采用“早期失败”的方法,所以如果有一些依赖于版本的东西(例如 GTK),我会首先导入它。
取决于,大多数时候我都会使用 import foo 和 from foo import,但也有某些情况(例如该名称已由另一个导入定义)我也使用 from foo import bar as bla 。
4 个空格。时期。如果您确实想使用制表符,请确保在使用 SCM 时将其转换为空格,然后再提交。但切勿(!)混合使用制表符和空格!它可能并且将会引入可怕的错误。
some_method 或 foo_function,一个常量,MyClass。
此外,在方法调用或某些内容跨越多行的情况下,您还可以争论缩进,并且可以争论将使用哪种行延续样式。要么用包围一切 ()
或者做 \
在这行的最后。我选择后者,并且还将运算符和其他内容放置在下一行的开头。
# always insert a newline after a wrapped one
from bla import foo, test, goo, \
another_thing
def some_method_thats_too_long_for_80_columns(foo_argument, bar_argument, bla_argument,
baz_argument):
do_something(test, bla, baz)
value = 123 * foo + ten \
- bla
if test > 20 \
and x < 4:
test_something()
elif foo > 7 \
and bla == 2 \
or me == blaaaaaa:
test_the_megamoth()
我也有一些比较操作的指南,我总是使用 is(not)
检查 None True False
我从来没有像这样进行隐式布尔比较 if foo:
, , 我经常做 if foo is True:
, ,动态类型很好,但在某些情况下我只是想确保它做正确的事情!
我做的另一件事是永远不要使用空字符串!它们位于常量文件中,在其余代码中我有类似的内容 username == UNSET_USERNAME
或者 label = UNSET_LABEL
这样更具描述性!
我也有一些严格的空白准则和其他疯狂的东西,但我喜欢它(因为我对此很疯狂),我什至编写了一个检查我的代码的脚本:
http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle
警告(!):这会伤害你的感情!甚至比 JSLint 还要多......
但这只是我的2分钱。