一个清晰的项目结构通常遵循以下通用拆分逻辑:
-
按工作流分块 :首先将代码按机器学习流程(如数据处理、模型训练、性能评估等)划分到独立的
.py文件中,这是构建有序项目最基础也最关键的一步。 -
统一工具模块 :将公用辅助功能集中写入一个公共的
utils.py文件中。 -
整合配置参数 :将所有配置项与参数统一归入一个专门的
config.py文件,便于集中管理。 -
隔离内容与源码 :在顶层建立
data/和models/等目录,专门存放数据和模型文件,使之与存放代码的src/目录物理分离。
遵循这些通用的组织原则,你的项目结构便会自然而然地变得层次分明、易于管理。
关于if name == "main"
这个写法就是用来区分"这个文件是被直接运行,还是被其他文件导入"的。
示例说明:
假设有一个项目,有两个Python文件:
文件1:utils.py(一个工具文件,提供计算功能)
示例代码:
python
# 这个文件定义一些工具函数
def add(a, b):
"""计算两个数的和"""
return a + b
def multiply(a, b):
"""计算两个数的积"""
return a * b
# 下面这行代码是测试代码
# 如果没有 if __name__ == "__main__" 会怎样?
print("正在测试工具函数...")
print(f"2 + 3 = {add(2, 3)}")
print(f"2 × 3 = {multiply(2, 3)}")
print("测试完成!")
文件2:main.py(主程序文件)
示例代码:
python
# 主程序文件,导入并使用工具文件
from utils import add, multiply
print("=== 主程序开始运行 ===")
result1 = add(10, 20)
result2 = multiply(5, 6)
print(f"10 + 20 = {result1}")
print(f"5 × 6 = {result2}")
print("=== 主程序结束 ===")
如果直接运行 main.py,会发生什么?
实际输出:
正在测试工具函数...
2 + 3 = 5
2 × 3 = 6
测试完成!
=== 主程序开始运行 ===
10 + 20 = 30
5 × 6 = 30
=== 主程序结束 ===
解决方案:使用 if __name__ == "__main__"
修改后的 utils.py:
示例代码:
python
def add(a, b):
"""计算两个数的和"""
return a + b
def multiply(a, b):
"""计算两个数的积"""
return a * b
# 增加这个判断
if __name__ == "__main__":
# 只有直接运行这个文件时,下面的代码才会执行
print("正在测试工具函数...")
print(f"2 + 3 = {add(2, 3)}")
print(f"2 × 3 = {multiply(2, 3)}")
print("测试完成!")
实际输出:
=== 主程序开始运行 ===
10 + 20 = 30
5 × 6 = 30
=== 主程序结束 ===