zoukankan      html  css  js  c++  java
  • 016-1 模块-模块的加载顺序、导入执行流程

    1、模块的加载顺序:内存=》内置=》sys.path

    import sys
    sys,path      #环境变量:存放文件路径的列表
    # 重点:默认列表的第一个元素就是当前被执行的问建所在的目录

    # 可以自定义往sys.path添加路径
    sys.path.append(r'想导入的模块的绝对路径')  # 添加到环境变量最后,最后被查找
    sys.path.insert(0, r'想导入的模块的绝对路径')  # 添加到指定索引,索引就决定了自定义模块的查找顺序

    2、模块的导入执行流程

    导入模块的指令:

    --相对于 函数()调用函数体,函数调用会进入函数体,从上至下逐句解释执行函数体代码
    --导入模块,会进入模块文件从上至下逐句执行模块的文件的代码
    --如果在模块中有遇到其他模块,会接着进入导入的模块,从上至下逐句解释执行文件中代码,依次类推

    3 循环导入

    模块之间出现了环状导入,如:m1.py 中导入了m2,m2.py 中又导入了m1

    循环导入的问题:

    ①导入模块是要使用模块中的变量的

    ②正常的逻辑都是在文件的最上方先完成对模块的导入,在定义自身模块,以及使用导入的模块中的变量、
    ③由于导入模块的特殊机制,第一次导入模块会编译执行,导入的模块,也就是会进入模块逐句执行内容,再次导入使用内存中的名字
    ④就会出现下面的情况,m2在使用m1中的变量x,但变量x却并未产生,这就出现了循环导入问题
       

    m1.py文件
    import m2
    x = 10
    print(m2.y)
    
    m2.py文件
    import m1
    y = 10
    print(m2.x)

    解决循环导入的问题:延后导入
    1、将循环导入对应包要使用的变量提前定义,再导入响应的包
    2、将导包的路径放到函数体中,保证存放导包逻辑的函数调用在要使用的变量定义之后

    重点:
    问题:from导包极容易出现循环导入问题
    解决:建议from导入方式改用import导入方式

  • 相关阅读:
    maven:读取程序版本号的三种方案
    有无目标的人生差10倍!赶紧和娃把新年计划做起来
    都怎么了,其实早就知道,但是一直没有找到答案……
    python添加tab键功能
    电影观后感
    ipset批量配置iptables
    Oracle 触发器,事物
    Oracle PL/SQL高级应用 视图 同义词 序列
    Oracle PL/SQL高级应用 存储过程
    Oracle PL/SQL高级应用 游标
  • 原文地址:https://www.cnblogs.com/king-home/p/10780247.html
Copyright © 2011-2022 走看看