关于python导包的理解

2019-01-09  本文已影响81人  飞跑的蛤蟆

在python中,每个模块的包中,都有一个__init__.py的文件,有了这个文件,我们才能导入这个目录下的module。

那么它还有别的功能吗,答案是有的。其实,__init__.py里面还是可以有内容的,我们在导入一个包时,实际上导入了它的__init__.py文件。我们可以先在__init__.py文件中导入其他的包,或者模块。这样,当我们导入这个包的时候,__init__.py文件自动运行。帮我们导入文件中写的信息,这样就可以减少代码量。

__init__.py中还有一个重要的变量,叫做__all__。在使用from PackageName import *时,import就会把注册在包__init__.py文件中__all__列表中的子模块和子包导入当前作用域中来。

python中的包和模块有两种导入方式:精确导入和模糊导入

以上图为例,精准导入,假如settings.py里有函数say_hello(),say_hi()
此时start.py需要引用它们,可以用以下的写法:

from settings.settings import say_hello,say_hi

假如方法比较多,就可以用模糊导入,而__all__则可以控制*所表示要引入的东西(模块,类,函数,变量,常量等):

from settings.settings import *
image.png

但是如果将__all__里的say_hi去掉,start.py中就会报say_hi未定义的错误。

image.png

__init__.py中引入所有内容:
setting模块中的__init__.py中用__all__声明要引入的模块等信息。

image.png
上一篇下一篇

猜你喜欢

热点阅读