循环导入问题
程序员文章站
2023-10-31 22:06:04
[TOC] 什么是循环导入?(掌握) 1. 创建m2的名称空间 2. 执行m2.py,将执行产生的名字丢到m2.py 3. 在当前执行文件中拿到m2.x 1. 创建m1的名称空间 2. 执行m1.py,将执行产生的名字丢到m1.py 3. 在当前执行文件中拿到m1.y 1. 创建m1的名称空间 2. ......
目录
什么是循环导入?(掌握)
# 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
推荐阅读
-
超级兔子安装失败怎么办?超级兔子常见问题及解决办法介绍
-
将PasswordAgent密码文件导入Keepass的方法(图文)
-
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
-
.net webapi跨域问题
-
.net core ajax使用EPPlus上传excle导入总结
-
.net core 发布到iis问题 HTTP Error 500.30 - ANCM In-Process Start Failure
-
Windows 10补丁又出问题:会卡更新 并导致重置功能失效
-
Windows 10补丁又双叒出问题 惠普用户卡在开机界面
-
卡巴斯基拒绝背锅:微软Win10更新致设备关机是他们问题
-
明虾的做法有哪些?制作明虾需要注意哪些问题