day 31
文件的拆分
1. 项目核心代码组织
src/(source的缩写):存放项目的核心源代码。
2. 配置文件管理
config/ 目录:集中存放项目的配置文件,方便管理和切换不同环境(开发、测试、生产)的配置。
3. 实验与探索代码
notebooks/ 或 experiments/ 目录:用于初期的数据探索、快速实验、模型原型验证。
4. 项目产出物管理
data/ 目录:存放项目相关数据。
models/ 目录:专门存放训练好的模型文件,根据模型保存格式不同,可能是 `.pkl`(Python pickle 格式,常用于保存 sklearn 模型 )、`.h5`(常用于保存 Keras 模型 )、`.joblib` 等。
reports/ 或 output/ 目录:存储项目运行产生的各类报告和输出文件。
if __name__ == "__main__"
常常会看到if __name__ == "__main__"这个写法,实际上,每个文件都是一个对象,对象就会有属性和方法。
如果直接运行这个文件,则__name__等于__main__,若这个文件被其他模块导入,则__name__不等于__main__。
这个写法有如下好处:
1. 明确程序起点:一个 Python 项目往往由多个模块组成。if __name__ == "__main__" 可清晰界定程序执行的起始位置。比如一个包含数据处理模块 data_processing.py、模型训练模块 model_training.py 的机器学习项目,在 model_training.py 中用 if __name__ == "__main__" 包裹训练相关的主逻辑代码,运行该文件时就知道需要从这里开始执行(其他文件都是附属文件),让项目结构和执行流程更清晰。(大多时候如此)
2. 避免执行:python遵从模块导入即执行机制,当你使用 import xxx 导入一个模块时,Python 会执行该模块中的所有顶层代码(即不在任何函数或类内部的代码)。如果顶层代码中定义了全局变量或执行了某些操作(如读取文件、初始化数据库连接),这些操作会在导入时立即生效,并可能影响整个程序的状态。为了避免执行不必要的代码,我们可以使用 if __name__ == "__main__" 来避免在导入时执行不必要的代码。这样,只有当模块被直接运行时(即被执行 python xxx.py),才会执行顶层代码,而导入时则不会执行。这样,我们就可以确保在导入模块时,不会执行不必要的代码,从而提高程序的性能和可维护性。
3. 合理的资源管理:if __name__ == "__main__" 与定义 main 函数结合使用,函数内变量在函数执行完这些变量被释放,能及时回收内存资源,避免内存泄漏,保证程序高效运行。
心脏病预测实例
其中
├── data/ # 数据文件夹
│ ├── raw/ # 原始数据
│
├── src/ # 源代码
│ ├── __init__.py
│ ├── data/ # 数据处理相关代码
│ │ ├── __init__.py
│ │ ├── preprocessing.py
│ │
│ ├── models/ # 模型相关代码
│ │ ├── __init__.py
│ │ ├── train.py
│ │
│ └── visualization/ # 可视化相关代码
│ ├── __init__.py
│ └── plots.py
│
├── notebooks/ # Jupyter notebooks
│ └── 数据处理.ipynb
│
├── requirements.txt # 项目依赖
└── README.md # 项目说明文档
@浙大疏锦行