Hi, 大家好。我是茶桁。
这一段Python之旅怎么样?还算顺利吧?
之前我们都学习了些什么?有基本常识,流程,函数,不同类型的数据以及一些模块对吧?并且还做了一些练习来巩固所学过的内容。
那么今天,我们接着来学习模块。不过今天要学的模块和以往不太一样了,以前我们学习的都是Python内置的一些模块,而今天呢,我们自己来打包模块。
模块
简单点说,当我们定义一个Python文件,其后缀名为.py
的时候,那么这个文件就被称为模块。
模块中通常呢会定义一些相似的类、函数等代码内容,提供给别的程序引入使用。那对于应用,之前我们已经用过很多次了对吧?我们曾多次应用系统模块来使用,那这次,我们还是从系统模块开始吧。
系统模块
系统模块实际上就是一个Python的程序脚本,专门提供给我们自己的程序使用。它们是在安装好Python环境时,就已经存在的,需要的时候可以使用 import
导入到程序中使用。比如:
import os, re, time, json, calendar
自定义模块
那知道了系统模块是什么东西,在理解自定义模块就轻松多了对吧?其实就是我们自己创建一个Python脚本,定义一些类或方法,供别的脚本导入后使用。
由于本节课比较特殊,所以课程源码除了
18.ipynb
这个笔记本文件之外,还有有一个文件夹,路径为./Python/packages/file
,然后内部会有多个.py
文件。
比如我们定义一个self.py
文件如下:
# self.py
# 定义类
class MyException():
pass
# 定义函数
def func():
print('我是一个模块中的func函数')
# 定义变量
myStr = 'iloveyou'
然后让我们在笔记本中引用这个文件(模块)以及其他模块,让我们来看看,还记得我们是怎么引入模块的嘛?来,回忆一下:
# 先引入一个系统模块:time
import time
print(f'time:{
time.time()}')
---
time:1692005247.144672
我们引入了一个系统模块time
,然后执行了一下模块里的time()
方法,并把最终结果打印了出来。
既然都已经有例子了,那我们有样学样来试试引入我们自己创建的文件:
import self
---
ModuleNotFoundError: No module named 'self'
报错了,告诉我们并没有self
这个模块。这个…
还记得我们刚才说过的文件路径嘛?./Python/packages/file
,而我们当前文件18.ipynb
是放在Python
目录下的,层级关系如下:
- .
- Python/
- ...
- 18.ipynb
- packages/
| - self.py
也就是说,我们要应用self.py
, 需要找对路径才行。那我们将路径加上去:
# 引入自定义模块
import packages.self
这回执行之后是没报错了,应该没问题了。
那下面呢,让我们来操作一下文件内的类、函数之类的试试:
# 使用模块中定义的类
obj = packages.self.MyException()
print(obj)
---
<packages.self.MyException object at 0x10468cb80>
没毛病,确实获取到了相关类病打印了出来。
可是我们这也太麻烦了,每次使用这个模块不