1.Python包
包:包含模块的文件夹.
一个py文件是一个模块.
2.包与普通文件夹的区别
包与文件夹:
包:含有一个__init__.py
普通文件夹: 空
3.导入模块与导入包
模块首次导入发生的3件事:
1.执行文件产生一个全局名称空间
2.执行导入模块语句时,执行模块文件,模块中全部名称,存档到全局名称空间
3.模块文件的全局名称空间绑定给执行文件一个名称
* 之后便可以使用这个名字得到模块文件的全部名称.
包首次导入发生的3件事:
1.执行文件产生一个全局名称空间
2.执行导入包语句时,执行包内的__init__.py文件,文件中产生的名称,存档到全局名称空间
3.__init__.py文件产生的全局名称空间绑定给执行文件一个名称
* 导入包就是导入__init__.py 文件
* 在Python3中,即使包下没有__init__.py文件,import 包仍然不会报错,而在python2中,包下一定要有该文件,否则import 包报错
Project1
|
|----run.py
|
|---a
|---.__init.py
import a
print(123)
在导入包a的时执行.__init__.py
4.点符号的作用
导入文件的点代表路径.
执行语句的点代表从名称里空间中取值.
5.包的使用
在__init__.py 内的名称其他同级文件都能引用.
也不在是导入包内的其他文件.
包内
Project2
|---run.py
|
----a
|
|---.__init__.py ---> 有一个名称 name --指向10
|
|---m1.py ---> print(name) ---> 10
import a
print(a.m1.name)
import a.m1
print('from __init__.py')
name = 10
6.注意点
__init__py 中:
import m1 这行语句报错
run.py 导入 包 a 执行.__init__.py
.__init__.py的第一条语句是 import m1 报错
原因:这个时候import a 只站在 run.py的角度去导模块m1
直接提示找不到,改为 a.m1 就能找到.