当前位置 : 主页 > 手机开发 > ROM >

模块的循环导入问题及模块的路径搜索

来源:互联网 收集:自由互联 发布时间:2021-06-10
模块的循环导入问题 一、什么是循环导入 两个模块互相导入,就形成了导入循环,比如下面的这种情况 print (x) from m2 import xy = 20 m1.py print (y) from m1 import yx = 1 m2.py 如果运行m1.py,则会产

模块的循环导入问题

一、什么是循环导入

两个模块互相导入,就形成了导入循环,比如下面的这种情况

分享图片
print(x)
from m2 import x
y = 20
m1.py 分享图片
print(y)
from m1 import y
x = 1
m2.py

如果运行m1.py,则会产生`ImportError: cannot import name ‘y`

如果运行m2.py,则会产生`ImportError: cannot import name ‘x`

所以根本原因是:在导入的时候,m1需要访问m2的变量y,但是y没有初始化完成
所以解决方法有两个:

二、解决方案

y初始化完成后,才让m1.py访问m2.py的变量

方案一

分享图片
1 print(x)
2 
3 def func1():
4     from m2 import x
5     print(x)
6 
7 y =20
m1.py 分享图片
1 print(y)
2 
3 def func1():
4     from m1 import y
5     print(y)
6 
7 x = 1
m2.py

方案一

分享图片
1 print(x)
2 
3 y = 20
4 from m2 import x
m1.py 分享图片
1 print(y)
2 
3  x = 1
4  from m1 import y
m2.py

 模块的路径搜索

一、模块的的搜索路径顺序

  1. 先从内存中已经导入的模块中寻找
  2. 内置的模块
  3. 自定制的函数中找
  4. 环境变量sys.path中找
  主要记住未来项目的执行文件一定要弄一个环境变量
网友评论