模块:
一个模块就是一个包含Python代码的文件,一个文件就是一个模块
为什么使用模块
1.现在程序开发文件比较大,都放在一个文件中维护不方便,拆分成多个文件方便维护和管理
2.模块可以增加代码的重用率
3.模块可以当做命名空间
如何定义自己的模块
模块本身就是一个文件,所有py代码都可以在文件中直接书写,不过我们开发公用模块时,最好在模块中书写一下内容
变量 模块中的属性
函数 单独的功能
类 相似功能组合
模块测试代码 临时使用,被导入时不会执行
测试代码:
测试代码经常在开发模块时用于测试模块的功能,但是测试代码仅在开发和测试时使用,被当做模块导入时不希望测试代码运行,需要使用name特殊变量来操作
if __name__ == '__main__':
#测试代码区域(仅在吧当前文件直接运行时才会执行测试代码,当作模块导入时则不会执行)
__name__ 在直接运行当前文件时,结果为__main__
__name__ 被当作模块导入文件时,结果为 模块名称
模块的导入方式
1.import 模块名
2.import 模块名 as 别名
3.from 模块 import 函数/类
4.from 模块 import *
模块的存放
import sys
sys.path #获取当前搜索路径的列表
sys.path.append(自定义的路径) #将自定义的路径添加到列表中
模块的加载顺序
导入模块操作的步骤:
1.检测内存中是否已经加载过当前模块,如果加载过,直接使用加载的模块
2.如果内存中没有加载过当前模块,则搜索Python的内置模块
3.如果当前内置模块中没有改模块,根据搜索路径查找并且加载模块
包:
包就是文件夹,用于存放文件也就是模块,包中也可以存放包
包的结构:
|---- __init__.py 包的标志文件
|---- 模块1
|---- 模块2
|---- 子包(文件夹)
|-----|----__init__.py
|---- |----子模块1
|---- |----子模块2
包的导入和使用
1.import 包.模块
2.import 包.模块 as 别名
3.from 包.模块 import 函数或者类或者属性
4.from 包.模块 import *
包的相互调用问题
如果在当前模块中需要调用其他模块或者包的内容时,可以直接使用import导入对应的包和模块你,就可以加载进来使用,import会搜索包和模块对应的搜索路径
注:
__init__.py 文件中添加内容
给inint文件添加内容 就相当于给包添加内容 包可以被导入使用
__all__特殊变量的用户
1. 在__init__.py文件中,如果没有__all__变量,那么使用from包import * 仅导入__init__.py中定义的方法和类及其他内容
2. 在init.py文件中,如果定义all变量,那么使用from包import * 则会导入指定的所有模块,而忽略init.py文件中的信息
__all__ = [‘模块’,‘子包’....] #必须是列表