当前位置: 首页 > 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            # 项目说明文档

@浙大疏锦行

http://www.dtcms.com/a/202629.html

相关文章:

  • 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)
  • 什么是物联网 (IoT):2024 年物联网概述
  • Fiddler 指定链接断点
  • Python Selenium 使用指南
  • 公网ip能绑定什么?
  • 30天自制操作系统day5(vram和显存)(GDT和IDT)(c语言结构体)(汇编-c)(ai辅助整理)
  • 基于大模型预测的闭合性髌骨骨折诊疗全流程研究报告
  • Tractor S--二维转一维,然后最小生成树
  • 如何看待镍钯金PCB在当代工业制造中的地位和应用?
  • AI大模型应对挑战,使用winform实现小球在旋转五边形内的舞蹈
  • 深入理解 Python 中的几种方法:实例方法、类方法、静态方法与特殊方法