news 2026/6/14 19:26:11

Day 37 文件的规范拆分和写法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 37 文件的规范拆分和写法

@浙大疏锦行

在不同的文件中导入其他目录的文件,核心在于了解导入方式和python解释器检索目录的方式。

如何把一个文件,拆分成多个具有着独立功能的文件,然后通过import的方式,来调用这些文件。这样具有几个好处:

1. 可以让项目文件变得更加规范和清晰

2. 可以让项目文件更加容易维护,修改某一个功能的时候,只需要修改一个文件,而不需要修改多个文件。

3. 文件变得更容易复用,部分通用的文件可以单独拿出来,进行其他项目的复用。

1.项目核心代码组织

2.配置文件管理

3.实验与探索代码

4.项目产出管理

注意事项

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 函数结合使用,函数内变量在函数执行完这些变量被释放,能及时回收内存资源,避免内存泄漏,保证程序高效运行。

编码格式

规范的py文件,首行会有:# -- coding: utf-8 --

主要目的是 显式声明文件的编码格式,确保 Python 解释器能正确读取和解析文件中的非 ASCII 字符(如中文、日文、特殊符号等)。也就是说这个是写给解释器看的。

因为,在 Python 2.x 时代,默认编码是 ASCII,不支持直接在代码中写入非 ASCII 字符(如中文注释、字符串中的中文),否则会报错(SyntaxError: Non-UTF-8 code starting with...)。但是Python 3.x 默认为 UTF-8 编码,理论上可以省略编码声明。但实际开发中,为了兼容旧代码、明确文件编码规则,或在团队协作中避免因编辑器 / 环境配置不同导致的乱码问题,许多开发者仍会保留这一行声明。

ps:

1. 编码声明必须出现在文件的前两行(通常是首行),否则会被忽略。

2. 如果编码格式没问题,可能是vscode的编码格式不是utf-8,可以尝试修改编码格式。

3. 常见的编码报错是因为字符串编码问题,可以尝试显式转化,即读取的时候转化为utf-8编码。

非ASCII 字符的代码如下所示:

# -*- coding: utf-8 -*- msg = "你好,世界!" # 中文字符串 print(msg) #你好,世界!

很多时候,项目中会包含gitattribute文件,来确保在不同操作系统和编辑器中,文件的编码格式一致。

类型注解

Python 的类型注解是在 Python 3.5+ 引入的特性,用于为变量、函数参数、返回值和类属性等添加类型信息。虽然 Python 仍是动态类型语言,但类型注解可以提高代码可读性、可维护性,并支持静态类型检查工具(如 mypy)。

其次你在安装python插件的时候,附带安装了2个插件

1. 一个是python debugger用于断点调试,我们已经介绍了

2. 另一个是pylance,用于代码提示和类型检查,这个插件会根据你的代码中的类型注解,给出相应的提示和检查,比如你定义了一个函数,参数类型是int,那么当你传入一个字符串时,它会提示你传入的参数类型不正确。

变量类型注解语法为 变量名: 类型

# 变量的类型注解 name: str = "Alice" age: int = 30 height: float = 1.75 is_student: bool = False

函数类型注解为函数参数和返回值指定类型,语法为 def 函数名(参数: 类型) -> 返回类型。

def add(a: int, b: int) -> int: return a + b def greet(name: str) -> None: print(f"Hello, {name}")

类属性与方法的类型注解:为类的属性和方法添加类型信息。

# 定义一个矩形类 class Rectangle: width: float # 矩形宽度(浮点数),类属性的类型注解(不初始化值) height: float # 矩形高度(浮点数) def __init__(self, width: float, height: float): self.width = width self.height = height def area(self) -> float: # 计算面积(宽度 × 高度) return self.width * self.height
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 6:15:58

区块链核心知识点梳理(7)-Gas 机制与优化

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录7. Gas 机制与优化7.1 Gas 基础原理7.1.1 为什么需要 Gas?7.1.2 Gas 计算规则7.2 EIP-1559 详解7.2.1 动态 BaseFee 机制7.2.2 Priority Fee(…

作者头像 李华
网站建设 2026/6/12 12:38:12

[网鼎杯 2020 朱雀组]Nmap 1

Nmap 相关参数 -iL 读取文件内容,以文件内容作为搜索目标 -o 输出到文件 举例 nmap -iL ip_target.txt -o result.txt 扫描ip_target.txt内包含的ip地址,输出扫描结果至result.txt 读取文件结果 # Nmap 6.47 scan initiated Fri Dec 24 06:48:23 202…

作者头像 李华
网站建设 2026/6/11 16:07:52

从0到1搭建智能分析OBS埋点数据的AI Agent:实战指南

在数据驱动业务决策的时代,OBS埋点数据作为用户行为分析的核心资产,其价值挖掘却常因技术门槛陷入困境。传统分析流程中,工程师需手动解析表结构、编写SQL查询、生成可视化图表,不仅效率低下且难以支持灵活的探索式分析。本文将结…

作者头像 李华
网站建设 2026/6/9 22:54:50

ABB机器人系统自带调试例行程序介绍

ABB机器人系统自带调试例行程序介绍1.AxisCalibration (轴校准)功能:用于校准机器人每个轴的“偏置”或“零点位置”。机器人在出厂时,每个关节轴都有一个机械的零点标记,此程序就是通过示教器操作,将软件中的零点位置与机械标记对…

作者头像 李华
网站建设 2026/6/12 10:21:09

Brian2终极指南:免费开源神经网络模拟器快速上手

Brian2终极指南:免费开源神经网络模拟器快速上手 【免费下载链接】brian2 Brian is a free, open source simulator for spiking neural networks. 项目地址: https://gitcode.com/gh_mirrors/br/brian2 你知道吗?在神经科学和人工智能研究领域&…

作者头像 李华
网站建设 2026/6/10 15:37:09

24、Linux系统设备管理与任务调度全解析

Linux系统设备管理与任务调度全解析 1. /proc文件系统与内核版本 在Linux系统中,/proc文件系统是一个特殊的文件系统,它提供了对内核数据的访问。通过 /proc/version ,可以查看内核版本号。你可以像操作其他目录和文件一样在 /proc 文件系统中导航,使用 more 或 c…

作者头像 李华