【一】模块与包
(1)什么是模块
- 在Python中,一个py文件就是一个模块,文件名为xxx.py模块名则是xxx,导入模块可以引用模块中已经写好的功能。
(2)模块的来源
- 内置的:python解释器自带的,直接拿来使用的
- 第三方的:别人写的,如果想用,就要先下载在使用
- 自定义的:我们自己写的
(3)模块的存在形式
- 我们自己写的py文件(一个py文件就是一个模块)
- 包:一系列py文件的集合(文件夹)
一个包里面会有一个__init__.py文件
(4)模块的使用
(1)直接导入
(2)import导入多个模块方式
-
用import语句导入多个模块
| import module1 |
| import module2 |
| ... |
| import moduleN |
-
还可以在一行导入,用逗号分隔开不同的模块
| import module1,module2,...,moduleN |
但其实第一种形式更为规范,可读性更强,推荐使用
而且我们导入的模块中可能包含有python内置的模块、第三方的模块、自定义的模块
为了便于明显地区分它们,我们通常在文件的开头导入模块
并且分类导入
一类模块的导入与另外一类的导入用空行隔开
(5)详细导入
(6)模块重命名
- from ... import ... as ... 语句
| from 模块位置 import 模块名 as 自定义名字 |
| |
| import foo as f |
| f.x |
| f.get() |
- 通常在被导入的名字过长时采用起别名的方式来精简代码
- 另外为被导入的名字起别名可以很好地避免与当前名字发生冲突
- 还有很重要的一点就是:
- 例如
- 我们有两个模块json和pickle同时实现了load方法
- 但解析的格式不同
| if data_format == 'json': |
| |
| import json as serialize |
| elif data_format == 'pickle': |
| |
| import pickle as serialize |
| |
| |
| data=serialize.load(fn) |
【二】包
(1)什么是包
- 包是一个模块的集合,它可以将多个模块的功能组合到一起。
- 包可以按照其功能和作用进行分类,方便用户查找和使用。
- 包是在Python标准库中定义的一种特殊类型的模块,可以通过import语句来引入和使用。
- Python的包分为标准库包和第三方库包。
- 标准库包是Python内置的包,包含了一些基本的模块和函数,如os、sys、random等;
- 第三方库包是第三方开发的包,通常提供了更加丰富和高级的功能。
(2)包结构
- 包是Python程序中用于组织模块的一种方式。包是一个包含模块的目录,同时还可以包含其他子包。
- 要创建一个包,我们只需要在目录中创建一个名为
__init__.py
的文件即可。
| |-pakageName |
| |-__init__.py |
| |-moduleName1.py |
| |-moduleName2.py |
| |-... |
| |
(3)创建包
- 我们创建一个 cal 的包,包中有一个计算器的 model ,结构如下:
| |-cal |
| |-__init__.py |
| |-calculator.py |
| |
| def add(a, b): |
| return a + b |
| |
| |
| def reduce(a, b): |
| return a - b |
| |
| |
| def multiply(a, b): |
| return a * b |
| |
| |
| def divide(a, b): |
| return a / b |
(4)直接使用包
- Python 包的使用和模块的使用类似,下面是导入的语法:
(1)演示
- 比如我们在
use_cal.py
中导入 calculator.py
| |
| import cal.calculator |
| |
| print(cal.calculator.add(1,2)) |

(2)详细使用包
| from 包名.模块名 import 模块中的方法 |
(5)制作包
(1)注册包
- 在cal包下的
__init__.py
中注册相关变量
| from .calculator import add, reduce |
(2)使用包
| from cal import add, reduce |
【三】循环导入问题
- 循环导入问题指的是在一个模块加载/导入的过程中导入另外一个模块
- 由于第一个模块尚未加载完毕
- 究其根源就是在python中
- 同一个模块只会在第一次导入时执行其内部代码
- 再次导入该模块时
- 即便是该模块尚未完全加载完毕也不会去重复执行内部代码
- 解决方式:导入语句放到最后,保证在导入时,所有名字都已经加载过
【四】相对路径和绝对路径
(1)绝对路径
| D:\2023propygo\day\day15\ATM1.py |
(2)相对路径
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通