包就是一个包含有__init__.py文件的文件夹
包的本质是模块的一种形式,包是用来被当做模块导入
导入包发生的三件事(假设导入mmm包):
1、产生一个名称空间
2、运行包下的__init__.py文件,将运行过程中产生的名字都丢到1的名称空间中
3、在当前执行文件的名称空间中拿到一个名字mmm,mmm指向1的名称空间
mmm文件下__init__.py
print('运行了。。。。')
x = 1111
y = 2222
def say():
print('hello')
test.py
import mmm
print(mmm.x)
print(mmm.y)
mmm.say()
结果:
运行了。。。。
1111
2222
hello
关于包相关的导入语句也分为import和from … import …
两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:
凡是在导入时带点的,点的左边都必须是一个包,否则非法。
如import 顶级包.子包.子模块,但都必须遵循这个原则。
对于导入后,在使用时就没有这种限制了,点的左边可以是包,模块,函数,类(它们都可以用点的方式调用自己的属性)。
例如:
from a.b.c.d.e.f import xxx
import a.b.c.d.e.f
其中a、b、c、d、e 都必须是包