一.模块的循环导入问题

  在python工程中,由于架构不当,可能会出现模块间互相引用的情况.这时候需要通过一些方法来解决这个问题

    1.重新设计架构,解决互相引用的关系.

    2.把import语句放置在模块的最后

    3.把import语句放置在函数中

  方法2:

    示例代码:拥有两个模块:m1.py和m2.py

    

    

    运行执行文件run.py.文件中只导入m1模块

    执行结果:

    

    这样就可以解决互相引用出错的问题

  方法3

    示例代码:拥有两个模块:m1.py和m2.py

    

    

    运行执行文件run.py.文件中导入m1模块,并执行m1中的f1()函数

    执行结果:

    

二.区分python文件的两种用途

  在模块中我们也可以运行模块本身代码.从而做到测试自身代码的作用,但是如果没有将模块中的运行的代码关闭时就会发生在导入该模块时自动运行了模块中的功能

  为了解决这一问题,我们可以使用python自带的__name__

  例如:

    

  当模块执行时会运行其中的两个函数,当是执行文件运行时则不运行这两个函数

三.模块的搜索路径

  模块的导入需要一个叫做"路径搜索"的过程,即在文件系统"预定义区域"中查找某个文件,这些预定义区域只不过时你的Python搜索路径的集合.

  模块搜索路径的优先级:

    1.内存中已经加载过的

    2.内置模块

    3.sys.path第一个值是当前执行文件所在的文件夹

  代码示例:执行文件run.py需要调用在同级文件夹dir1下的m1模块

  解决方案一:

    

  解决方案二:

    

  两种方法都可以解决问题,只要在合适的环境下选择合适的方法即可

  环境变量是以当前执行文件为准

  所有被导入的模块参照环境变量sys.path都是以执行文件为准

四.绝对导入与相对导入

  绝对导入:以执行文件的sys.path为起始点开始导入,称为绝对导入
    优点:执行文件与被导入的模块都可以使用
    缺点:所有导入都是以sys.path为起始点,导入麻烦
  相对导入:参照当前所在文件的文件夹为起始点开始查找,称为相对导入
    符号:.代表当前所在文件的文件夹.加一个.代表上一级文件夹
    优点:导入更加简便
    缺点:只能在被导入的模块中使用,不能在执行文件中使用

最新文章

  1. .net登录的一般模式
  2. NSString的内存管理问题 (转载)
  3. POJ 2083 Fractal
  4. Java代码中执行Linux命令,亲测可用
  5. 20150618_Andriod_设置TextView垂直滚动
  6. [itint5]直角路线遍历棋盘
  7. web service c# 互调 java (转)
  8. 【分割平面,分割空间类题】【HDU1290 HDU2050】
  9. 测试工具:insure++
  10. c#常见stream操作
  11. Amazon前技术副总裁解剖完美技术面试
  12. 【Unity游戏开发】浅谈Unity游戏开发中的单元测试
  13. Maven常见错误以及解决方案【转载】
  14. word设置每页50行
  15. Ocean的游戏(前缀和)
  16. strcpy函数用法
  17. 170828、Eclipse Java注释模板设置详解以及版权声明
  18. react的新手基础知识笔记
  19. Java反射1——扫描某个包下的所有类
  20. oracle 两个网络不通的远程数据库如何将一个库中的表数据导入到另一个库中?

热门文章

  1. Java性能优化之高性能JAVA代码的若干个习惯
  2. hdu2328(后缀数组 + 二分)
  3. Python列表删除的三种方法
  4. 【模板】割点(割顶) Tarjan
  5. C语言之基本编程思想与基本概念扫盲
  6. 江西财经大学第一届程序设计竞赛 B
  7. Oracle table-lock的5种模式
  8. A. Wrong Subtraction
  9. Go语言基础之21--反射
  10. log4net独立配置文件配置(winfrom)