Python · 代码规范

格式规范

  • 缩进:统一使用 4 个空格进行缩进

  • 行宽:每行代码尽量不超过 80 个字符

  • 引号:自然语言使用双引号,机器标识使用单引号

  • 空行:模块级函数和类定义之间空两行,类成员函数之间空一行

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class A:

    def __init__(self):
    pass

    def hello(self):
    pass


    def main():
    pass
  • 编码:文件使用 UTF-8 编码,文件头部加入 #-*-conding:utf-8-*- 标识

  • importimport 语句 应该分行书写

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 正确的写法
    import os
    import sys

    # 不推荐的写法
    import sys,os

    # 正确的写法
    from subprocess import Popen, PIPE
  • 空格

    • 在二元运算符两边各空一格 [=, -, +=, ==, >, in, is not, and]
    • 函数的参数列表中,, 之后要有空格
    • 函数的参数列表中,默认值等号两边不要添加空格
    • 左括号之后,右括号之前不要加多余的空格
    • 字典对象的左括号之前不要多余的空格
    • 不要为对齐赋值语句而使用的额外空格
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    # 正确的写法
    i = i + 1
    submitted += 1
    x = x * 2 - 1
    hypot2 = x * x + y * y
    c = (a + b) * (a - b)

    # 不推荐的写法
    i=i+1
    submitted +=1
    x = x*2 - 1
    hypot2 = x*x + y*y
    c = (a+b) * (a-b)

    # 正确的写法
    def complex(real, imag):
    pass

    # 不推荐的写法
    def complex(real,imag):
    pass

    # 正确的写法
    def complex(real, imag=0.0):
    pass

    # 不推荐的写法
    def complex(real, imag = 0.0):
    pass

    # 正确的写法
    spam(ham[1], {eggs: 2})

    # 不推荐的写法
    spam( ham[1], { eggs : 2 } )

    # 正确的写法
    dict['key'] = list[index]

    # 不推荐的写法
    dict ['key'] = list [index]

    # 正确的写法
    x = 1
    y = 2
    long_variable = 3

    # 不推荐的写法
    x = 1
    y = 2
    long_variable = 3
  • 换行

    • 第二行缩进到括号的起始处
    • 禁止复合语句,即一行中包含多个语句
    • if/for/while 一定要换行
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    foo = long_function_name(var_one, var_two,
    var_three, var_four)

    # 正确的写法
    do_first()
    do_second()
    do_third()

    # 不推荐的写法
    do_first();do_second();do_third();

    # 正确的写法
    if foo == 'blah':
    do_blah_thing()

    # 不推荐的写法
    if foo == 'blah': do_blash_thing()
  • docstring:所有的公共模块、函数、类、方法,都应该写 docstring

注释规范

  • 在代码的关键部分,能写注释的要尽量写注释
  • 比较重要的注释段,使用多个等号隔开,可以更加醒目,突出重要性
  • 文档注释以 “”” 开头和结尾,首行不换行,如有多行,末行必需换行
  • 要在文档注释复制函数定义原型,而是具体描述其具体内容,解释具体参数和返回值等
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
app = create_app(name, options)


# =====================================
# 请勿在此处添加 get post等app路由行为 !!!
# =====================================


if __name__ == '__main__':
app.run()


# 不推荐的写法(不要写函数原型等废话)
def function(a, b):
"""function(a, b) -> list"""
... ...


# 正确的写法
def function(a, b):
"""计算并返回a到b范围内数据的平均值"""
... ...

命名规范

  • 模块:模块名尽量使用小写命名,首字母保持小写,尽量不要用下划线
  • :类名使用驼峰 (CamelCase) 命名风格,首字母大写,私有类可用一个下划线开头
  • 函数:函数名一律小写,如有多个单词,用下划线隔开,私有函数可用一个下划线开头
  • 变量:变量名尽量小写,如有多个单词,用下划线隔开
  • 常量:常量名采用全大写,如有多个单词,使用下划线隔开
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 模块命名
import decoder
import html_parser


# 类命名
class Farm():
pass

class AnimalFarm(Farm):
pass


# 私有类命名
class _PrivateFarm(Farm):
pass


# 函数命名
def run():
pass

def run_with_env():
pass


# 私有函数命名
class Person():

def _private_func():
pass


# 变量命名
if __name__ == '__main__':
count = 0
school_name = ''


# 常量命名
MAX_CLIENT = 100
MAX_CONNECTION = 1000
CONNECTION_TIMEOUT = 600