本文档定义了 TheAlgorithms/Python 存储库中算法实现的全面标准和要求。它涵盖了编码约定、文档要求、测试标准和提交指南,以确保所有算法贡献的一致性和教育价值。
有关测试和验证程序的信息,请参阅测试与验证要求。有关一般的贡献工作流程和存储库设置,请参阅存储库基础设施与 CI/CD。
所有算法实现都必须遵循严格的标准,以保持教育质量和代码一致性。每个算法提交都必须实现核心功能要求,使其适合教育用途和集成到更大的程序中。
本存储库中的算法定义为一个或多个函数或类,它们接受输入、执行计算或数据操作、返回输出,并具有最少量的副作用。实现必须打包好,以便于集成到更大的程序中。
算法实现结构 来源:CONTRIBUTING.md43-62
所有实现都必须遵循 Python 命名约定,以确保可读性和一致性。存储库强制执行特定的命名模式,以帮助读者理解算法的目的并方便代码维护。
| 组件 | 约定 | 示例 |
|---|---|---|
| 函数 | snake_case | greatest_common_divisor() |
| 变量 | snake_case | input_array, result_value |
| 常量 | UPPER_CASE | MAX_ITERATIONS |
| 类 | CamelCase | BinarySearchTree |
| 文件 | snake_case.py | quick_sort.py |
| 目录 | snake_case | dynamic_programming/ |
关键命名要求包括:
greatest_common_divisor() 而不是 gcd())。所有函数参数和返回值都必须包含 Python 类型提示。此要求允许使用 mypy 进行静态类型检查,并为教育目的改进代码文档。
存储库的 CI 管道运行 mypy --ignore-missing-imports 来验证所有类型提示,确保所有实现的一致性。
每个函数都必须包含全面的 docstring,以用于文档和教育目的。Docstring 应包含算法目的的清晰说明、可选的详细说明以及适用的来源材料参考。
Docstring 组件和结构 来源:CONTRIBUTING.md116-125 project_euler/README.md30-48
算法文件应包含模块级 docstring,提供上下文和参考。对于 Project Euler 解决方案,模块 docstring 必须包含完整的题目说明和解决方案方法。
示例模块结构
来源:project_euler/README.md22-24
所有函数都必须包含 doctests,以演示有效用法和错误处理。Doctests 作为可执行的文档,并由 CI 管道自动验证。
Doctest 要求
Doctests 在本地使用 python3 -m doctest -v 执行,在 CI 管道中使用 pytest 执行。
算法必须使用 Python 异常来处理无效输入,以实现适当的错误处理。这确保了健壮的行为和清晰的错误消息,以便用于教育。
常见的异常模式
ValueError 用于无效的参数值TypeError 用于不正确的参数类型所有提交都必须通过 CI 管道强制执行的自动化代码质量检查。存储库使用多种工具来确保代码风格和质量的一致性。
代码质量管道 来源:CONTRIBUTING.md64-100
| 工具 | 目的 | 命令 | 要求 |
|---|---|---|---|
| Black | 代码格式化 | black . | 推荐要求 |
| Ruff | Linting and style | ruff check | 必填 |
| MyPy | 类型检查 | mypy --ignore-missing-imports . | 必填 |
| Pre-commit | Automated hooks | pre-commit install | 推荐要求 |
所有提交都必须在接受前通过 ruff . 测试。存储库配置可确保所有算法实现的代码风格一致。
严格的命名约定可确保一致的存储库结构,并支持 CI 系统进行自动化处理。
文件名规则
.py。目录结构
Project Euler 解决方案有额外的组织要求,以支持自动验证和答案检查。
Project Euler 目录结构 来源:project_euler/README.md16-21
Project Euler 命名约定
problem_XXX(3 位零填充数字)sol1.py、sol2.py(用于多个解决方案)__init__.py 文件。解决方案函数要求
solution,默认参数匹配问题输入。来源:project_euler/README.md26-31
算法实现应最大限度地减少外部依赖,以保持教育清晰度和降低复杂性。
导入指南
requirements.txt。首选 Python 构造
map、filter、reduce。