当一个项目中有很多个模块时,需要再进行组织。将功能类似的模块放到一起,就形成了“包”。
本质上,“包”就是一个必须有init.py 的文件夹。典型结构如下:
包下面可以包含“模块(module)”,也可以再包含“子包(subpackage)”。就像文件夹下面可以有文件,也可以有子文件夹一样:
上图中,a 是上层的包,下面有一个子包:aa。可以看到每个包里面都有init.py 文件。
init.py 的核心作用:
- 作为包的标识,不能删除。
2. 用来实现模糊导入。
3. 导入包的实质是执行init.py 文件,可以在init.py 文件中做这个包的初始化、以及需要统一执行的代码。import pack1 # 意味着执行了包pack1下面的__init__.py 文件
导入与执行
想要导入module_AA.py,执行其中的fun()函数,有三种方法:
import a.aa.module_AA
a.aa.module_AA.fun() # 使用时加完整名称来引用
from a.aa import module_AA
module_AA.fun() # 使用时直接使用模块名
from a.aa.module_AA import fun
fun() # 使用时直接使用函数名
注:
1. from package import item 中,item
可以是包、模块,也可以是函数、类、变量。
2. import item1.item2 这种语法中,item
必须是包或模块,不能是函数、类、变量。
示例
【示例】测试init.py 文件的本质用法
a 包下的init.py 文件内容:
import turtle import math
'''批量导入'''
print("导入 a 包")
在b 包下的module_B1.py 文件中:
>>>import a
>>>导入 a 包
>>>print(a.math.pi)
>>>3.141592653589793