#创建一个m1.py
print('正在导入m1')
from m2 import y
x = 'm1'
----------------------------------------
#创建一个m2.py
print('正在导入m2')
from m1 import x
y='m2'
----------------------------------------
#创建一个run.py
import m1
# 会报错
# 先执行run.py--->执行import m1,开始导入m1并运行其内部代码--->打印内容"正在导入m1"--->执行from m2 import y 开始导入m2并运行其内部代码--->打印内容“正在导入m2”--->执行from m1 import x,由于m1已经被导入过了,所以不会重新导入,所以直接去m1中拿x,然而x此时并没有存在于m1中,所以报错
-----------------------------------------
# 直接执行m1.py
# 会报错
# 执行m1.py,打印“正在导入m1”,执行from m2 import y ,导入m2进而执行m2.py内部代码--->打印"正在导入m2",执行from m1 import x,此时m1是第一次被导入,执行m1.py并不等于导入了m1,于是开始导入m1并执行其内部代码--->打印"正在导入m1",执行from m1 import y,由于m1已经被导入过了,所以无需继续导入而直接问m2要y,然而y此时并没有存在于m2中所以报错
-----------------------------------------
# 解决方法:
# 方法一:导入语句放到最后
# 方法二:导入语句放到函数中
原文:https://www.cnblogs.com/zyyhxbs/p/11100038.html