由于我对“样式”非常着迷,所以我将写下我目前在近 8k SLOC 项目中使用的指南,其中包含大约 35 个文件,其中大部分与 PEP8 匹配。
PEP8 说 79(WTF?),我选择 80,我现在已经习惯了。毕竟眼球运动少!
''' 中跨越多行的文档字符串和内容。中的所有其他内容''
。另外我不喜欢双引号,我一直只使用单引号...猜那是因为我来自 JavaScript 角落,在那里使用 '' 更容易,因为这样你就不必全部转义HTML的东西:O
在头部,在自定义应用程序代码之前内置。但我也采用“早期失败”的方法,所以如果有一些依赖于版本的东西(例如 GTK),我会先导入它。
取决于,大多数时候我使用 import foo 和 from foo import,但是在某些情况下(例如,名称已经由另一个导入定义)我也使用 from foo import bar 作为 bla。
4 个空格。时期。如果您真的想使用制表符,请确保在使用 SCM 时在提交之前将它们转换为空格。但永远不要(!)混合标签和空格!它可以并且将会引入可怕的错误。
some_method 或 foo_function,一个 CONSTANT,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/大师/检查风格
警告(!):它会伤害你的感情!甚至比 JSLint...
但这只是我的 2 美分。