当前位置: 首页 > news >正文

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            # 项目说明文档

@浙大疏锦行

相关文章:

  • Linux(ubuntu18.04)下安装instant-ngp环境
  • 系统设计——项目设计经验总结1
  • 4.8 加密模块
  • 【动手学深度学习】1.1~1.2 机器学习及其关键组件
  • BioID技术:探索蛋白质相互作用的新方法
  • Vue3——Pinia
  • 数据分析预备篇---Pandas的DataFrame的更多操作
  • 【Linux】Linux 多线程
  • 【DeepSeek】为什么需要linux-header
  • 网络刷卡器的分类和网口通讯流程
  • 变频器如何通过Profibus DP主站转Modbus RTU/TCP接入到上位机
  • HTTP 协议的发展历程及技术演进
  • 文档债务拖累交付速度?5大优化策略文档自动化
  • 【深度学习:理论篇】--一文理解Transformer
  • Kotlin 协程 (二)
  • HomeAssistant开源的智能家居docker快速部署实践笔记(CentOS7)
  • 基于ROS2/Gazebo的室内送餐机器人系统开发实战教程
  • 生产消费者模型 读写者模型
  • 监控易一体化运维:采集集群管理,构建稳健运维基石
  • 【SPIN】高级时序规范(SPIN学习系列--6)
  • 赣州蓉江新区党工委原书记王凌主动交代问题,正接受审查调查
  • 河北6人在河道倒污泥被控污染环境案撤诉后,已拿到国赔决定书
  • 大学2025丨苏大教授王尧:文科最大的危机是阐释世界的能力弱化
  • 新华社千笔楼:地方文旅宣传应走出“魔性尬舞”的流量焦虑
  • 视觉周刊|走进变革中的博物馆
  • 发射后失联,印度地球观测卫星发射任务宣告失败