项目规范
Flake8规范
Flake8 是 PEP8 代码风格检查工具,主要检查以下内容
缩进
4 个空格
行长度
最多 79 字符(PEP8 严格)或 99 字符(宽松)
空行
具体规则:
- 模块顶级定义(类/函数)前后:2 个空行
- 类内方法前:1 个空行
- 导入组之间:1 个空行
- 导入和代码之间:2 个空行
导入
顺序:
- 标准库(stdlib)
- 第三方库(third-party)
- 本地模块(local)
每组之间 1 个空行
空格
具体规则:
- 二元运算符(
=、+、-、*、/)前后各 1 个空格 - 比较符(
>、<、==、!=)前后各 1 个空格 - 逗号后面 1 个空格
- 冒号前面 0 个空格,后面 1 个空格(字典、类型注解)
- 函数参数默认值的
=前后不需要空格:def func(x=1):
命名
常见规则:
- 大驼峰: 每个单词首字母大写,无下划线
- 蛇形命名: 全小写,单词间用下划线分隔
- 常量蛇形 / 大写蛇形: 全大写,单词间用下划线分隔
# 正确
class MyClass: # 类:PascalCase
def my_method(self): # 函数/方法:snake_case
my_var = 1 # 变量:snake_case
CONSTANT = 10 # 常量:UPPER_SNAKE_CASE
# 错误
class myClass: # 应该是 MyClass
def myMethod(self): # 应该是 my_method
myVar = 1 # 应该是 my_var
未使用变量
检查导入和变量,不要出现未导入的库
复杂度
McCabe 循环复杂度:
10是行业共识的 “合理上限”—— 研究表明,复杂度≤10时,代码的可测试性、可读性、可维护性处于较好水平;超过10后,测试用例数量会指数级增加,bug率和维护成本大幅上升。
PEP257规范
PEP257 是文档字符串Docstring规范
Docstring必须存在
# 正确 - 模块有 docstring
"""这是模块的说明"""
# 正确 - 类有 docstring
class MyClass:
"""这是类的说明"""
pass
# 正确 - 函数有 docstring
def my_function():
"""这是函数的说明"""
pass
# 错误 - 没有 docstring
def my_function():
x = 1
return x
Docstring格式使用三引号
# 正确 - 双三引号
def func():
"""这是 docstring"""
pass
# 正确 - 单三引号
def func():
'''这是 docstring'''
pass
# 错误 - 单引号
def func():
'这是错误的'
pass
# 错误 - 双引号
def func():
"这是错误的"
pass
一行Docstring vs 多行Docstring
一行 Docstring(简短)
# 正确 - 简短的 docstring 一行写完
def simple_func():
"""返回一个数字"""
return 42
class SimpleClass:
"""简单的类"""
pass
多行Docstring
# 正确格式
def complex_func(x, y):
"""计算两个数的和。
这是更详细的说明,可以多行。
:param x: 第一个数字
:param y: 第二个数字
:return: 两个数的和
"""
return x + y
# 错误 - 第二行应该空一行
def complex_func(x, y):
"""计算两个数的和。
这是更详细的说明。 # 错误:应该先空一行
"""
return x + y
Docstring内容结构
一行 Docstring:总结句 + 句号
def func():
"""返回用户名。""" # 正确
return "John"
def func():
"""返回用户名""" # 错误:没有句号
return "John"
多行Docstring:总结 + 空行 + 详细说明
# 正确格式
def divide(a, b):
"""计算两个数的除法。
详细描述:这个函数用于数学计算。
支持浮点数和整数。
:param a: 被除数
:param b: 除数
:return: 除法结果
:raises ZeroDivisionError: 当 b 为 0 时
"""
if b == 0:
raise ZeroDivisionError("除数不能为 0")
return a / b
类的Docstring
# 正确
class Calculator:
"""计算器类 - 提供基础数学运算功能。
属性:
precision: 计算精度
方法:
add: 加法
subtract: 减法
"""
def __init__(self, precision=2):
"""初始化计算器。
:param precision: 结果精度,默认为 2
"""
self.precision = precision
def add(self, a, b):
"""计算两个数的和。
:param a: 第一个数
:param b: 第二个数
:return: 和
"""
return a + b
句号要求
# 正确 - 有句号
def func():
"""这是一个函数。"""
pass
# 错误 - 没有句号
def func():
"""这是一个函数"""
pass
# 正确 - 多行也要有句号
def func():
"""这是一个函数。
更多细节。
"""
pass
空白行要求
# 正确 - 短 docstring 和代码之间没有空行
def func():
"""简单函数"""
x = 1
return x
# 正确 - 长 docstring 和代码之间有空行
def func():
"""函数说明。
详细描述。
"""
x = 1 # 这里有空行
return x
# 错误 - 短 docstring 后面有空行
def func():
"""简单函数"""
x = 1 # 不应该有空行
return x