美文网首页
关于python导包的理解

关于python导包的理解

作者: 飞跑的蛤蟆 | 来源:发表于2019-01-09 22:55 被阅读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

    相关文章

      网友评论

          本文标题:关于python导包的理解

          本文链接:https://www.haomeiwen.com/subject/kshnrqtx.html