赞
踩
遵循 PEP 8 标准:所有代码应遵循 PEP 8 风格指南。可以使用工具如 flake8
或 pylint
来检查代码风格。
行宽限制:每行代码的长度不应超过 80 个字符。对于文档字符串或注释,限制为 72 个字符。
缩进:使用 4 个空格进行缩进,不要使用制表符。
空行:函数和类之间使用两个空行分隔;方法之间使用一个空行分隔。
导入:
5.1 首先导入标准库,然后是第三方库,最后是本地应用/库特定的导入;
5.2 尽可能使用绝对导入;
import os
import sys
from third_party import some_module
from my_project import my_module
class MyClass:
def __init__(self, value):
self.value = value
def my_method(self):
return self.value
import sys, os
from my_project import my_module
from third_party import some_module
class MyClass:
def __init__(self, value):
self.value = value
def my_method(self): return self.value
通用原则
- 描述性命名:使用描述性命名,使变量、函数和类名具有自解释性。
- 命名风格:不同类型的标识符遵循特定的命名风格。
UPPER_CASE
命名常量。MAX_RETRIES = 5
max_retries = 5
snake_case
命名变量和函数。def calculate_sum(a, b):
total_sum = a + b
return total_sum
def CalculateSum(a, b):
totalSum = a + b
return totalSum
CamelCase
命名类。class DataProcessor:
def __init__(self, data):
self.data = data
class data_processor:
def __init__(self, data):
self.data = data
# 模块名
import my_module
import example_module
# 包名
import mypackage
import tools
_
分隔,而不是使用连字符 -
或空格。!@#$%^&*()
),只使用字母、数字和下划线。正确: my_module.py, utils.py, data_processing.py
错误: MyModule.py, utils-file.py, data processing.py
config.py
、settings.py
,应放置在项目的根目录或专门的配置目录下。test_
开头,如 test_module1.py
、test_utils.py
,并放置在 tests
目录下。run_analysis.py
、generate_report.py
,应放置在专门的 scripts
目录下。data.csv
、dataset.json
,应放置在 data
目录下。使用文档字符串(docstring)记录所有公共模块、函数、类和方法。
文档字符串采用reStructuredText(reST)风格。
增加添加类型提示的规范
def add(a, b):
"""
Add two numbers.
:param a: First number.
:param b: Second number.
:return: Sum of a and b.
"""
return a + b
def add(a, b):
# Adds two numbers
return a + b
project/ ├── README.md ├── requirements.txt ├── setup.py ├── config/ │ ├── config.py │ └── settings.py ├── module1/ │ ├── __init__.py │ ├── data_processing.py │ └── utils.py ├── module2/ │ ├── __init__.py │ ├── data_analysis.py │ └── visualization.py ├── tests/ │ ├── __init__.py │ ├── test_data_processing.py │ └── test_utils.py ├── scripts/ │ ├── run_analysis.py │ └── generate_report.py └── data/ ├── data.csv └── dataset.json
文档字符串:每个公共模块、函数、类和方法都应编写文档字符串。使用三引号(“”" “”")括起来,并简要描述功能。
内联注释:尽量减少使用内联注释,仅在必要时使用,并将其与代码用两个空格隔开。
块注释:用于解释复杂的代码段,使用 #
开头,每行都需要 #
。
def add(a, b):
"""
返回 a 和 b 的和。
参数:
a (int): 第一个加数。
b (int): 第二个加数。
返回:
int: 和。
"""
return a + b
使用适当的异常类型:尽量使用内置异常类,并确保异常的类型与实际错误相符。
提供有用的错误消息:在引发异常时,提供清晰、有用的错误消息。
避免空的 except 块:避免捕获所有异常而不做处理,至少记录日志或重新引发异常。
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"Error: {e}")
模块化:将代码划分为模块和包,以提高代码的可维护性和可重用性。
单一责任原则:每个模块、类或函数应该只承担一个责任或功能。
避免循环依赖:确保模块之间的依赖关系是单向的,避免循环导入。
# 目录结构示例
project/
├── module1.py
├── module2.py
├── package/
│ ├── __init__.py
│ ├── submodule1.py
│ └── submodule2.py
└── main.py
编写测试:为每个模块和函数编写单元测试。使用 unittest
、pytest
或其他测试框架。
测试覆盖率:确保测试覆盖率达到一定的标准,例如 80% 或更高。
持续集成:使用持续集成工具(如 GitHub Actions、Travis CI)自动运行测试。
import unittest
class TestMyFunction(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 3), 5)
if __name__ == '__main__':
unittest.main()
使用 Git:所有代码应使用 Git 进行版本控制。
提交信息:提交信息应简洁明了,描述所做的更改。
分支模型:使用分支模型(如 Git Flow)管理开发流程。
git init
git add .
git commit -m "Initial commit"
使用虚拟环境:使用 venv
或 virtualenv
创建隔离的 Python 环境。
依赖文件:使用 requirements.txt
或 Pipfile
列出项目依赖。
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
source venv/bin/activate # Unix/macOS
venv\Scripts\activate # Windows
# 安装依赖
pip install -r requirements.txt
避免过早优化:在确保代码正确性的基础上,再进行性能优化。
使用分析工具:使用 cProfile
、line_profiler
等工具分析代码性能。
提高算法效率:选择合适的数据结构和算法,以提高代码效率。
import cProfile
def my_function():
pass
cProfile.run('my_function()')
输入验证:对用户输入进行验证和清理,防止注入攻击。
敏感信息:不要在代码中硬编码敏感信息,如密码和 API 密钥。
依赖更新:定期更新依赖库,确保使用最新的安全补丁。
import os
# 从环境变量读取敏感信息
API_KEY = os.getenv('API_KEY')
以上是 Python 开发的详细规范文档,希望能够帮助您和您的团队在开发过程中保持代码的一致性和高质量。
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。