Python的常见编码风格?

时间:2010-05-12 00:02:15

标签: python coding-style naming-conventions indentation column-width

我对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.-我可以使用“import whatever.function as blah”吗? 我看到一些文件忽视这样做。

5.-用于缩进的标签或空格?
目前使用4个空格标签。

6.-可变命名风格? 我使用小写字母除了类之外的所有东西,我把它放在camelCase中。

你会推荐什么?

3 个答案:

答案 0 :(得分:19)

PEP 8几乎是所有常见风格指南的“根源”。

谷歌的Python style guide有一些很好的想法,但其他部分是特殊的(两个空格缩进而不是流行的四空间缩进,以及用于函数和方法的CamelCase样式而不是camel_case风格,是非常重要的特质)。

关于您的具体问题:

  

1.-最广泛使用的色谱柱宽度是多少? (永恒的问题)   我目前正在坚持80列   (而且很痛苦!)

80列是最受欢迎的

  

2.-使用什么报价? (我已经看到了一切,PEP 8没有提到   什么都清楚)我正在使用单身   引用除了文档字符串之外的所有内容,   使用三重双引号。

我更喜欢你使用的风格,但即便谷歌也无法达成共识: - (

  

3.-我在哪里进口?我把它们放在文件头中   顺序。

     

导入python的sys import -rest   需要的模块 -

     

导入任何重要的导入   应用程序模块 -

     

是的,出色的选择,也很受欢迎。

  

4.-我可以使用“import whatever.function as blah”吗?我看到了一些   无视这样做的文件。

我强烈建议您始终导入模块 - 而不是模块内部的特定名称。这不仅仅是风格 - 有很多优点,例如:这样做的可测试性。 as子句没问题,可以缩短模块的名称或避免冲突。

  

5.-用于缩进的标签或空格?目前使用4个空格标签。

绝大多数人气最受欢迎。

  

6.-可变命名风格?除了课程,我用的是小写字母,   我把它放进了camelCase。

几乎每个人都使用大写的初始名称和使用全大写的常量命名类。

答案 1 :(得分:2)

1.-大多数人现在都有16:9或16:10的监视器。即使他们没有宽屏幕他们有很多像素,80 cols并不是一个很大的实际交易破坏者,就像每个人在4:3监视器上的远程终端窗口中攻击命令行时一样320 X 240.我通常在太长时间结束这一行,这是主观的。我在23“Monitor X 2上的2048 X 1152。

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.-始终使用SPACES! 2或4只要没有TABS

6.-类应该是UpperCaseCamelStyle,变量是小写的,有时是lowerCamelCase,有时是all_lowecase_separated_by_underscores,函数名称也是如此。 “常量”应为ALL_UPPER_CASE_SEPARATED_BY_UNDERSCORES

如有疑问,请参阅代码库中的PEP 8,Python源代码,现有约定。但最重要的是尽可能内部一致所有Python代码应该看起来像是由同一个人编写的。

答案 2 :(得分:1)

由于我对“造型”感到非常疯狂,所以我会写下我目前在近8k SLOC项目中使用的指南,其中包含大约35个文件,其中大部分与PEP8相匹配。

  1. PEP8说79(WTF?),我跟80去了,现在我已经习惯了。毕竟眼睛运动少了!

  2. 在'''中跨越多行的文档字符串和内容。 ''中的其他所有内容。另外我不喜欢双引号,我一直只使用单引号...猜测那是因为我来自JavaScript角落,它更容易使用'',因为这样你就不必全部逃脱HTML内容:O

  3. 在头部,内置自定义应用程序代码之前。但我也采用了“早期失败”的方法,所以如果有某些版本依赖于版本(例如GTK),我会首先导入它。

  4. 取决于,我大部分时间都使用import foo和foo import,但是某些情况(eG名称已经由另一个导入定义)我从foo导入栏中也用作bla。< / p>

  5. 4个空格。期。如果您真的想使用制表符,请确保在使用SCM之前将它们转换为空格。但从来没有(!)MIX TABS和SPACES !!!它可以并且会引入可怕的错误。

  6. some_method或foo_function,一个CONSTANT,MyClass。

  7. 此外,您可以在方法调用或跨越多行的情况下争论缩进,并且您可以争论将使用哪种行继续样式。要么使用()包围所有内容,要么在该行的末尾执行\。我做了后者,我还将操作符和其他东西放在下一行的开头。

    # 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:那样的隐式布尔比较,我总是{{1}动态打字很不错,但在某些情况下我只是想确保事情做对了!

    我做的另一件事是永远不要使用空字符串!它们位于常量文件中,在代码的其余部分中我有if foo is True:username == UNSET_USERNAME之类的内容,这样就更具描述性了!

    我也有一些严格的空白指南和其他疯狂的东西,但我喜欢它(因为我很疯狂),我甚至写了一个脚本来检查我的代码:
    http://github.com/BonsaiDen/Atarashii/blob/master/checkstyle

    警告(!):这会伤害你的感情!甚至比JSLint还要......

    但那只是我的2美分。