1.包标识
在python中有模块和包的概念,一个.py文件就是一个模块,而把很多个模块放到同一个文件夹下,同时加上__init__.py文件,这个文件夹就是一个包。由此可以看出__init__.py文件的第一个作用就是包标识。
以下有两个文件夹:dirtest和pktest。dirtest里面不包含__init__.py,所以只是普通的文件夹;而pktest文件夹里面包含了__init__.py文件,所以是一个包。
__init__.py文件可以是空的,也可以添加一些重要的变量,如__all__
2.__init__.py中__all__的作用
__all__可用于控制用from <package> import *导入时导入的标识符范围。我们在导入一个包时,实际上导入了它的__init__.py文件。只有被添加到__all__这个列表中的标识符才能被识别。
如:包pktest的test1模块有变量a,包pktest的test2模块有变量b,但是__init__.py的__all__只有变量a:
#__init__.py文件
from pktest.test1 import *
from pktest.test2 import *
__all__=[
"a"
]
在另一文件main.py中导入该包pktest:
from pktest import *
v1=a
v2=b
#运行时这里会报错:NameError: name 'b' is not defined
可以看到运行main.py时b变量位置报错