当前位置:首页>python>Python 模块与包指南(上):自定义模块与导入

Python 模块与包指南(上):自定义模块与导入

  • 2026-09-25 01:26:20
Python 模块与包指南(上):自定义模块与导入

项目稍大一点,就不能把所有代码塞进一个文件。本篇先讲清什么是模块、为什么要用模块,以及自定义模块、五种导入方式和搜索顺序。

本篇目录

1. 什么是模块

2. 为什么要使用模块

3. 模块的三种分类

4. 自定义模块

5. 模块导入方式

6. 模块搜索顺序

1. 什么是模块

在 Python 中,一个 .py 文件通常就是一个模块(Module)。可以把模块理解成工具箱:把相关代码集中放在一起,需要时再导入使用。

一个模块里可以放:

内容
例子
变量
num = 100
函数
def test(a, b): ...
类
class User: ...
常量
MAX_RETRY = 3
可执行语句
导入时会执行的初始化代码

目的只有一个:按功能拆分代码,统一管理。

2. 为什么要使用模块

如果所有逻辑都写在一个文件里,文件会越来越难读、难改、难协作。使用模块通常能带来:

1. 结构更清晰

2. 复用更容易(一次编写,多处导入)

3. 团队可并行开发不同模块

4. 维护成本更低

5. 降低不同功能区的命名冲突风险

3. 模块的三种分类

类型
说明
例子
标准库模块
安装 Python 后即可使用
random
、os、json
自定义模块
自己编写的 .py 文件
my_module1.py
第三方模块
他人发布,需额外安装
requests
、numpy

标准库示例:

import random# randint 包头也包尾number = random.randint(1, 9)print(number)

4. 自定义模块

每个 Python 文件都可作为模块,模块名通常就是去掉 .py 后的文件名。

4.1 命名规则

• 符合标识符规则:字母、数字、下划线;不能以数字开头;不能是关键字;不能含空格

• 见名知意,大小写敏感

• 推荐小写加下划线,如 add_num.py、login.py

• 不要与标准库同名,否则可能导入到错误模块

4.2 定义模块

新建 my_module1.py:

num = 100def test(a, b):  print(a + b)

4.3 测试代码与 __name__

开发模块时,常会在文件末尾写几行自测。如果直接调用:

num = 100def test(a, b):  print(a + b)test(10, 20)

那么只要这个模块被导入,测试代码也会执行,这通常不是你想要的。

正确写法是用入口判断:

num = 100def test(a, b):  print(a + b)if __name__ == "__main__":  test(10, 20)

__name__ 是每个模块的内置变量:

运行方式
__name__
 的值
含义
直接运行该文件
"__main__"
当前文件是程序入口
被其他文件 import
模块名,如 "my_module1"
当前文件作为库被导入

因此 if __name__ == "__main__": 的含义是:只有直接运行本文件时,才执行测试或启动逻辑。

5. 模块导入方式

常见五种写法:

# 1. 导入整个模块import my_module1my_module1.test(10, 20)print(my_module1.num)# 2. 起别名import my_module1 as mmprint(mm.num)# 3. 导入指定名称from my_module1 import numprint(num)# 注意:这里只导入了 num,不能写 my_module1.test(...)# 若也要函数,应:from my_module1 import num, test# 4. 导入并起别名(解决同名冲突)from my_module1 import num as n1from my_module2 import num as n2print(n1, n2)# 5. 星号导入(不推荐)from my_module1 import *from my_module2 import *print(num)test(10, 20)# 后面导入的同名对象会覆盖前面的,容易踩坑

选型建议:

写法
适用场景
import module
默认首选,命名空间清晰
import module as alias
模块名较长时
from module import name
明确只要少数几个符号
from module import name as alias
跨模块同名冲突
from module import *
交互探索可偶尔用;正式项目尽量避免

6. 模块搜索顺序

执行 import my_module1 时,解释器会按顺序查找,找到即停止;找不到则抛出 ModuleNotFoundError。

大致顺序:

1. 当前工作目录 / 脚本所在项目目录

2. sys.path 中的其余目录(标准库、site-packages、虚拟环境等)

可查看搜索路径:

import sysprint(sys.path)

示例目录结构:

project/├── my_module1.py└── test.py

在 test.py 中 import my_module1 时,会先在当前项目目录找到同级的 my_module1.py。

最新文章

随机文章