Python备忘(1):python import引用

关于程序中遇到的import问题的整理

参考:https://www.cnblogs.com/yan-lei/p/7828871.html

          https://www.cnblogs.com/kungfupanda/p/5257174.html

          https://www.cnblogs.com/kungfupanda/p/5257174.html


1.import对象

模块(module): 一个整体的*.py文件,里面包括类,函数,变量

包(package)  : 一个文件夹,在文件夹底下必须要有一个__init__.py文件,这样python才将这个文件夹看做一个包

    import模块的的时候,模块中的代码会直接执行,如果不想让一段代码执行可以将代码写在 if __name__ == "__main__"条件语句下。当一个模块被多次引用的时候,模块中的代码只会执行一次

    import直接引用包或者引用包下面的子包或者模块,程序都会先运行__init__.py中的代码。__init__.py中可以是一些环境配置的代码,如from . import module_name(相对引用)

2.import语法

1. import name1 (as name2)

2. import name1.name2... (as name3)

3. form name1 import name2 (as name3)

4. form name1.name2... import name3 (as name4)

    1.2方法后import只能是包或者模块,无法将模块中的函数,类,变量引用。如果想引用一个模块中的函数,类,变量可以使用3.4方法(form moudle import function_name)

    当只是import了一个包,不能直接在程序中通过  .  的方式使用包下面的模块中的函数或者子包中模块的函数(如:import package_name后   程序中直接package_name.module_name.function()会出错)使用函数必须import到相应的模块。

    如果想要直接import包后可以 . 到包下相应的模块 可以在包中__init__.py 中import相应的模块

    在绝对引用的时候程序寻找相应模块与包的顺序是根据sys.path中的路径的先后顺序的(相对引用与绝对引用在之后介绍)

3.import的特殊方法

    1.__all__
        在模块中或者包的__init__.py 中可以定义__all__,___all__是一个列表,列表中是要import的函数,类,变量的名称(__init__.py中是底下子包与模块的名字)。
          定义__all__之后,from package_or_module import * 可以直接加入__all__列出的元素

    2.相对引用

        当文件作为脚本执行的时候,*.py文件的__name__=="__main__",这是为什么如果不想让加入模块时执行代码可以将代码加在if __name__ == "__main__"条件语句下。

        当文件作为模块执行的时候,*.py文件的__name__=="关于最顶层包的相对路径"(如:package1.subpackage2.module)这个时候可以根据__name__的相对路径通过 '.'(当前文件夹)'..'(上一个文件夹)'...'(上上层文件夹)...来找到相应模块的位置import(如:from .. import module,相当于在文件的上一层包中找到module文件引用),这种引用方式是相对引用。在作为脚本执行的时候,因为__name__=="__main__"不能获得文件的相对位置,所以不能通过这种方式找到文件上一级所在包的文件。







你可能感兴趣的:(python)