由于我非常热衷于“样式”,所以我将记录下我目前在一个近8k SLOC项目中使用的指南,其中大部分符合PEP8。
1. PEP8说79(什么鬼?),我用80,而且现在已经习惯了。毕竟眼睛动得少!
2. 文档字符串和跨越多行的东西用'''。其他都用
''
。另外,我不喜欢双引号,我一直只用单引号...可能是因为我来自JavaScript领域,在那里使用''更容易,因为这样就不必转义所有的HTML内容:O
3. 在头部,内置代码优先于自定义应用程序代码。但我也采取“尽早失败”的方法,所以如果有某些依赖版本的东西(例如GTK),我会首先导入它。
4. 取决于情况,大多数时候我使用import foo和from foo import,但在某些情况下(例如名称已被另一个导入定义),我也会使用from foo import bar as bla。
5. 4个空格。就这样。如果你真的想使用制表符,在使用SCM时确保将其转换为空格后再提交。但绝对不能混合使用制表符和空格!!!这可能会引入可怕的错误。
6. some_method或foo_function,一个常量,MyClass。
此外,您还可以就缩进进行争论,特别是在方法调用或其他跨越多行的情况下,您可以争论使用哪种行继续样式。可以将所有内容都用()
括起来,也可以在行末使用\
。我通常采用后者,并且将运算符和其他内容放在下一行的开头。
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更糟糕...
但这只是我的个人看法。