包的本质:
- 包含__init__.py文件的文件夹
- 是模块的一种形式
- 所有文件都是被用来导入使用的,不是用来被直接执行的
import p1 做了三件事
- 创建p1的名称空间
- 执行__init__.py文件
- 在当前执行文件中拿到一个名字p1,p1指向__init__py的名称空间
绝对导入:每次导入都以最顶级的包为其实开始查找
run.py下面的代码 #触发p1下的__init__.py import p1 p1.m1.f1() p1.__init__.py下的代码 from p1 import m1 p1.m1下的代码: def f1(): print('f1.m1')
相对导入:相对于当前所在的文件,. 代表当前所在文件,..代表上一级,强调:相对导入只能在被导入的模块中使用
不写代码了。。。
包和文件夹的区别:包本质上就是以文件夹的形式组织的模块,是模块,是模块。python3包里面删掉__init__.py还是可以用,只是不能针对包里面的内容做一些定制化的功能。