美文网首页
import和from...import... 导入模块

import和from...import... 导入模块

作者: 冰封1999 | 来源:发表于2019-08-22 17:54 被阅读0次

    一、导入的机制:

    import 指令运行时执行并载入文件


    二、导入的过程:

    1、查找模块路径 按模块搜索路径

    2、编译成字节码(如果必要的话)

    ①缓存以提高效率

    ②当字节码旧于源文件或者版本有差异时重新编译

    ③隔离存储于__pacache__目录

    3、运行代码构造其定义的对象


    三、导入后,模块搜索路径

    1、程序主目录(常用)

    2、系统环境变量 PYTHONPATH 设定的目录

    3、标准库的目录

    4、任意.pth文件内容指定的目录(极少用)

    5、在 site-packages 目录下安装的第三方扩展


    四、导入的关键字

    1、import:导入整个模块

    也可以用from aaa import   #也是导入模块下所有成员,等价于import aaa

    2、from     ...  import    ...    :从模块获取特定成员

    ①场景:两个模块下都有同样的方法,比如product模块下有func()方法,utils模块下也有func()方法,那么如果在控制台下导入,后导入的就会把先导入的覆盖。

    product.py

    def get_product_list():

        print('获取所有产品列表...')

    def func():

        print('Product...')

    utils.py

    def func():

        print('Hello utils...')

    ②在控制台中输入:

    from product import func

    from utils import func

    执行后,就会一直输出Hello utils,即先导入的product模块的func被后导入utils模块的func覆盖了。

    ③如果解决上面的问题?,则可以用 as 分别给取个别名,如下:

    from product import func as pfunc

    from utils import func as ufunc

    3、importlib.reload(模块)

    导入只执行一次(如果被导入的文件发生变化,在同一个控制台窗口下,引用的还是之前导入的内容。

    解决方法:可以使用 importlib.reload(模块)

    ①不终止Python代码的情况下重新载入模块代码

    ②reload()函数参数必须为模块,而非载入对象名称:

    reload(模块名称)     #括号内必须是模块名称,而不是模块里的特定成员或者对象名称

    相关文章

      网友评论

          本文标题:import和from...import... 导入模块

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