updated: 09/04/2019.
命名规范
模块/文件
- 尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况)。
1 | # 示例 |
类型
类名使用驼峰命名风格,首字母大写,私有类可用一个下划线开头。
将相关的类和顶级函数放在同一个模块里, 没必要限制一个类一个模块。
1 | # 类名用驼峰命名风格 |
函数
- 函数名一律小写,如有多个单词,用下划线隔开。
- 私有函数在函数前加一个下划线_。
1 | # 函数名,小写单词下划线隔开 |
变量名
变量名尽量小写, 如有多个单词,用下划线隔开。
常量采用全大写,如有多个单词,用下划线隔开。
- 为了说明变量的作用域,可以加前缀以示说明:
变量类型 前缀 示例 整型 n_ n_count 浮点型 f_ f_rate 字符串 s_ s_input 局部 _ _temp 全局 g_ g_count
1 | if __name__ == '__main__': |
注释
代码注释
块注释
- “#”号后空一格,段落间用空行分开(同样需要“#”号)。
1 | # 这是块注释的第一句,还没结束。 |
行注释
- 至少使用两个空格和语句分开,注意不要使用无意义的注释。
1 | x = x + 1 # 行注释至少空两个空格 |
提醒注释
- 在代码的关键部分(或比较复杂的地方), 能写注释的要尽量写注释。
- 比较重要的注释段, 使用多个等号隔开, 可以更加醒目, 突出重要性。
1 | # ===================================== |
文档注释
- 一般出现在模块头部、函数和类的头部。
- 以 “”” 开头和结尾, 首行不换行, 如有多行, 末行必需换行。
- 不限于中英文, 但不要中英文混用。
- 模块、公有类、公有方法, 能写文档注释的, 应该尽量写文档注释。
- 具体可参照以下示例。
1 | # -*- coding: utf-8 -*- |
1 | def he_normal(seed=None): |
1 | class Conv2D(_Conv): |
代码风格
编码
- 一律采用
UTF-8
编码。- 文件头部建议加入
#-*-coding:utf-8-*-
标识
缩进
- 使用4个空格,而非
TAB
。
行宽
- 建议每行代码不超过80个字符(参考PyCharm中的参考线),超过用
\
换行。
引号
- 自然语言使用双引号
"..."
。- 代码常规字符用单引号
'...'
。- 正则表达式使用双引号
r"..."
。- 文档字符串(docstring)使用三个双引号
"""......"""
。
1 | # 自然字符串用双引号 |
空行
- 类定义末尾空两行。
- 类内函数之间空一行。
- 类外函数之间空两行。
- 函数内部逻辑相关的可以用空行间隔。
- 多个相关的函数可用多个空行间隔。
1 | class A(object): |
import
- 一条import写一行,多个import不要写到一行中去。
- 建议import的优先级: python自带的模块 > 第三方模块 > 自定义模块。酶类模块之间用空格分开。
- 不建议用相对引用,除了自己封装的库内。
- 注意不要因为多个import引起的命名冲突。
1 | import os |
空格
- 二元运算符两边各空一格:
=, -, *, /, +=, -=, ==, >, <, >=, <=, in, is, not, and
- 逗号
,
之后留一个空格。- 括号不用空格。
- 函数的形参中,默认值等号两边不要加空格。
- 不要强行为了对齐而空格。
- 在中文注释中,英文字符左右各空一格。
1 | x = x * x + 1 |
换行缩进
- 第二行缩进到括号起始处。
- 第二行缩进 4 个空格,适用于起始括号就换行处。
- 使用反斜杠
\
换行时,+
和.
等运算符应该出现在行末。- 严禁一行多句。
if/for/while
必须换行。
1 | foo = long_function_name(var_one, var_two, |