包:
就是一个包含有__init__.py文件的文件夹,
创建包的目的就是为了用文件夹将文件/模块组织起来
强调:
1,python3 下,即使包下没有__init__.py文件,import包不会报错
python2 下,一定要有__init__.py文件,否则报错
2,创建包的目的不是为了运行,而是被导入使用,
包的本质就是一个模块
import aaa
首次导入包时,发生的三件事:
1,产生一个包的名称空间
2,执行包下的__init__.py文件,将产生的名字存放于包的名称空间中,
3,在当前执行文件中拿到一个名字aaa,这个名字指向包的名称空间
# print(aaa.x) #aaa.x 就是问__init__.py要一个名字x # print(aaa.y) # print(aaa.m1) #aaa.m1 就是问aaa.__init__.py要一个名字m1 # aaa.m1.f1()
1 # from aaa.bbb import m3 2 3 #强调: 4 1,在导入时带点的,点的左边必须是一个包,这是导入包特有的语法 5 2,包内,模块直接的导入应该使用from....import.... 6 3,from....import.... import后必须是一个明确的名字,没有任何的前缀 7 实例: 8 from a.b.c.d.f import g.h.x 9 这是一个错误的导入方法 10 1,f左边必须都是包 11 2,import后的名字不能有任何前缀
绝对导入和相对导入
绝对导入:以包名起始
相对导入:用 . 或者 .. 方式为起始(只能在一个包中使用,不能用于不同目录内
# # 绝对导入 # from nb.m1 import f1,f2 # from nb.m2 import f3,f4 # from nb.m3 import f5,f6 # from nb.p1.m4 import f7 # 相对导入 from .m1 import f1,f2 from .m2 import f3,f4 from .m3 import f5,f6 from .p1.m4 import f7
)