目录

* 什么是循环导入?(掌握) <https://www.cnblogs.com/nickchen121/p/10802260.html#什么是循环导入掌握>
* 解决方案(掌握) <https://www.cnblogs.com/nickchen121/p/10802260.html#解决方案掌握>
* 方案一 <https://www.cnblogs.com/nickchen121/p/10802260.html#方案一>
* 方案二 <https://www.cnblogs.com/nickchen121/p/10802260.html#方案二>
什么是循环导入?(掌握)


# m1.py print('from m1.py') from m2 import x y = 'm1'
* 创建m2的名称空间
* 执行m2.py,将执行产生的名字丢到m2.py
* 在当前执行文件中拿到m2.x # m2.py print('from m2.py') from m1 import y x = 'm2'
* 创建m1的名称空间
* 执行m1.py,将执行产生的名字丢到m1.py
* 在当前执行文件中拿到m1.y # run.py import m1
* 创建m1的名称空间
* 执行m1.py,将执行产生的名字丢到m1.py
* 在当前执行文件中拿到m1
* 如果运行run.py,则会报错ImportError: cannot import name 'y'
* 如果运行m1.py,则会报错ImportError: cannot import name 'x'
* 如果运行m2.py,则会报错ImportError: cannot import name 'y'
解决方案(掌握)

我们可以使用函数定义阶段只识别语法的特性解决循环导入的问题,我们也可以从本质上解决循环导入的问题,但是最好的解决方法是不要出现循环导入。

方案一
# m1.py print('from m1.py') def func1(): from m2 import x print(x) y = 'm1' #
m2.py print('from m2.py') def func1(): from m1 import y print(y) x = 'm2'
方案二
# m1.py print('from m1.py') y = 'm1' from m2 import x # m2.py print('from
m2.py') x = 'm2' from m1 import y

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信