news 2026/9/25 6:33:51

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/9/25 8:32:05

【上海交通大学主办 | 连续6年IEEE出版 | 连续5届快速检索-往届会后3个月EI, Scopus检索 | 设优秀评选】第六届IEEE信息科学与教育国际学术会议(ICISE-IE 2025)

【快检索 | 高录用 | 连续5届快速 EI, Scopus, IEEE Xplore检索】 第六届IEEE信息科学与教育国际学术会议(ICISE-IE 2025) 2025 6th International Conference on Information Science and Education 大会时间:2025年12月26-28日 大会地点…

作者头像 李华
网站建设 2026/9/24 19:36:59

区块链核心知识点梳理(8)-钱包与账户体系

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录8. 钱包与账户体系8.1 钱包与账户的关系8.2 密钥生成流程8.2.1 完整生成过程8.2.2 代码实现8.3 HD 钱包(分层确定性钱包)8.3.1 BIP32/BIP39/B…

作者头像 李华
网站建设 2026/9/25 5:48:04

如何快速开展中小学AI教育:完整的AI通识课程指南

如何快速开展中小学AI教育:完整的AI通识课程指南 【免费下载链接】ai-edu-for-kids 面向中小学的人工智能通识课开源课程 项目地址: https://gitcode.com/datawhalechina/ai-edu-for-kids 在数字化浪潮席卷全球的今天,中小学AI教育已成为培养未来…

作者头像 李华
网站建设 2026/9/25 5:48:12

LeetCode 6. Z 字形变换 | 详细题解(附 C++ 代码)

一、题目描述 题目链接:LeetCode 6. Z 字形变换 题目要求 将字符串 s 按指定行数 numRows 排成Z 字形(先从上到下,再从右到左斜向上),然后从左到右逐行读取,输出新字符串。 示例演示 输入:…

作者头像 李华
网站建设 2026/9/24 19:53:55

22、Linux 系统基础管理入门指南

Linux 系统基础管理入门指南 1. 系统管理任务概述 系统管理涵盖了维持计算机系统正常运行的各项任务,系统可以是独立的客户端机器、支撑企业运营的网络服务器,或者介于两者之间的其他形式。系统管理员负责处理这些任务,确保系统按需求运行。 系统管理员的职责包括: - 添…

作者头像 李华
网站建设 2026/9/25 19:32:05

2026年大模型应用开发学习路线:四阶段转型指南,抓住未来3年的职业发展机遇!转AI大模型开发学习顺序真的很重要!

简介 文章指出大模型技术正在重塑IT行业,企业招聘要求大模型能力已成为趋势。为帮助程序员成功转型,文章提出了四阶段学习路径:大模型基础、RAG应用开发工程、大模型Agent应用架构、大模型微调与私有化部署。强调学习顺序的重要性&#xff0…

作者头像 李华