Python的常见编码风格是什么?

13 投票
3 回答
8103 浏览
提问于 2025-04-15 22:36

我刚开始学习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.- 变量命名风格是什么?
我对所有变量都用小写字母,只有类名用驼峰命名法。

你有什么建议吗?

3 个回答

1

因为我非常喜欢“样式”,所以我想把我目前在一个接近8000行代码的项目中使用的规范写下来,这个项目大约有35个文件,大部分都符合PEP8的标准。

  1. PEP8建议每行最多79个字符(真是搞笑?),我选择80个,现在习惯了。这样眼睛移动得少一些!

  2. 文档字符串和多行内容用三重引号''',其他的用单引号''。我不喜欢双引号,总是用单引号……可能是因为我之前用JavaScript,单引号用起来更方便,这样就不用处理所有的HTML内容了 :O

  3. 导入时,内置模块放在自定义应用代码之前。但我也采用“早失败”的方法,如果有些东西依赖于版本(比如GTK),我会先导入那些。

  4. 这要看情况,大多数时候我用import foofrom foo import,但在某些情况下(例如,名字已经被其他导入定义过),我也会用from foo import bar as bla

  5. 用4个空格。就这样。如果你真的想用制表符,确保在提交代码之前把它们转换成空格,尤其是在使用版本控制时。但绝对不要混用制表符和空格!这会引入可怕的bug。

  6. 命名时用some_methodfoo_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_USERNAMElabel = UNSET_LABEL,这样更具描述性!

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

警告(!):这会伤害你的感情!比JSLint还要严重……

不过这只是我的一点看法。

2

1.- 现在大多数人都有16:9或16:10的显示器。即使不是宽屏显示器,像素也很多,80列的限制已经不再像以前那样影响使用了。以前大家在320 X 240的4:3显示器上用命令行时,这个问题很严重。我通常会在行太长的时候换行,这个是个人感觉的事。我现在用的是2048 X 1152的23寸显示器,两个显示器。

2.- 默认使用单引号,这样你就不用去处理双引号的问题;当需要嵌入单引号时用双引号;如果字符串里有换行符,就用三重引号。

3.- 通常把它们放在文件的顶部,有时候如果某些内容只在main函数里用到,也可以放在那。

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个空格,绝对不要用制表符(TAB)。

6.- 类名应该用大写驼峰式命名,变量名通常是小写,有时是小写驼峰式,或者用下划线分隔的小写字母。函数名也是这样。“常量”应该用全大写字母,并用下划线分隔。

如果有疑问,可以参考PEP 8,查看Python的源代码和已有的代码规范。但最重要的是要保持内部一致性尽量让所有Python代码看起来像是同一个人写的。

21

PEP 8 可以说是所有常见代码风格指南的“根基”。

谷歌的Python 风格指南有些部分被认为很不错,但也有一些比较奇特的地方,比如用两个空格缩进而不是大家普遍使用的四个空格,还有函数和方法使用大写驼峰命名法,而不是小写加下划线的风格,这些都是比较大的不同之处。

接下来回答你的具体问题:

1.- 最常用的列宽是多少?(这个问题永远存在)我现在坚持使用80列(这真让人头疼!)

80列是最流行的选择。

2.- 应该用什么引号?(我见过各种各样的,PEP 8也没明确提到)我对所有内容使用单引号,只有文档字符串用三重双引号。

我喜欢你用的这种风格,但连谷歌对此也没能达成一致:-(

3.- 我应该把导入放在哪里?我把它们放在文件头部,顺序是这样的。

import sys
import -其他需要的python模块-
import whatever
import -其他应用模块-

是的,这个选择很好,而且也很流行。

4.- 我可以用“import whatever.function as blah”吗?我看到一些文档不建议这样做。

我强烈建议你总是导入模块,而不是从模块中导入特定的名称。这不仅仅是风格问题,这样做在可测试性等方面有很大的好处。as 这个用法是可以的,可以缩短模块名或避免名称冲突。

5.- 缩进用制表符还是空格?我现在使用4个空格。

绝大多数人都选择这个。

6.- 变量命名风格?我对所有变量使用小写,只有类名用驼峰命名法。

几乎所有人都用大写字母开头来命名类,常量则用全大写。

撰写回答