二、模块导入学习笔记
2026-02-21
Python基础
type
Post
status
Published
date
Feb 21, 2026
slug
python-module-import-notes-2
summary
我经常搞不清
import xxx 和 from xxx import yyy 的区别,也不知道什么时候该用 as。tags
category
Python基础
icon
password
💡 学习感悟:我经常搞不清import xxx和from xxx import yyy的区别,也不知道什么时候该用as。
1. 基本导入方式
1.1 import 模块名
📝 我的理解:import math就像是把工具箱搬回家——使用时需要说 "math 工具箱里的 xx 工具"。
1.2 from 模块 import 名称
📝 我的理解:from math import pi就像是只把需要的工具拿出来——直接就能用,不用翻工具箱。
1.3 import 模块 as 别名
📝 我的理解:as就像是起外号——numpy太长,就叫它np,打字快多了!
1.4 from 模块 import 名称 as 别名
📝 我的理解:当模块名和类名相同时,用as给类起个别名,避免混淆。
2. 批量导入
2.1 导入所有内容
⚠️ 踩坑:from xxx import *虽然方便,但会导入所有内容,容易覆盖已有变量,不推荐使用!
2.2 导入多个内容
📝 我的理解:一行导入多个,用逗号分隔,简洁明了。
3. 相对导入与绝对导入
3.1 绝对导入
📝 我的理解:绝对导入就像是完整地址——从省市区到街道门牌号,不会迷路。
3.2 相对导入
📝 我的理解:相对导入就像是邻居串门——.是隔壁,..是楼上,不用写完整地址。
3.3 相对导入规则
⚠️ 注意:入口文件(直接运行的文件)不能使用相对导入!
4. 导入的执行过程
4.1 导入时发生了什么
4.2 模块缓存
📝 我的理解:模块就像是单例模式——第一次导入时创建,之后都用同一个,节省资源。
5. 条件导入
5.1 根据条件导入
📝 我的理解:条件导入就像是因地制宜——Windows 用 Windows 的工具,Linux 用 Linux 的工具。
5.2 尝试导入
📝 我的理解:try/except导入就像是备胎方案——有就用,没有也能继续跑。
6. 踩坑记录
6.1 导入循环
⚠️ 踩坑:A 导入 B,B 又导入 A,会导致ImportError!用延迟导入或重构代码解决。
6.2 命名冲突
⚠️ 踩坑:导入的名称不要和变量名冲突,否则会覆盖!
6.3 导入未定义的内容
⚠️ 踩坑:导入前确认模块中确实有这个名字,否则会ImportError!
7. 核心知识点整理
7.1 导入方式对比
方式 | 语法 | 使用方式 | 适用场景 |
导入模块 | import math | math.pi | 常用,避免命名冲突 |
导入内容 | from math import pi | pi | 频繁使用某个功能 |
模块别名 | import numpy as np | np.array() | 模块名太长 |
内容别名 | from datetime import datetime as dt | dt.now() | 避免命名冲突 |
批量导入 | from math import * | pi, sqrt() | ⚠️ 不推荐 |
7.2 相对导入符号
符号 | 含义 | 示例 |
. | 当前目录 | from . import module |
.. | 上级目录 | from .. import module |
... | 上上级目录 | from ... import module |
7.3 导入的最佳实践
- 标准库 → 第三方库 → 自定义模块(按顺序分组)
- 一行导入一个模块,避免
import os, sys
- 避免
from xxx import *,容易命名冲突
- 需要别名时,使用社区约定(如
np,pd)
- 入口文件使用绝对导入,包内使用相对导入
Loading...
