python循环引用问题怎么解决_python解决循环引用问题
当项目中的模块过多,或功能划分不够清晰时会出现循环引用的问题,如下
有两个模块moduleA 和 moduleB:
#moduleA
from moduleB import b
def a():
print 'aaaaaaaa'
b()
def c():
print 'cccc'
if __name__ == '__main__':
a()
#moduleB
from moduleA import c
def b():
print 'bbbbbbbbbb'
c()
这种情况下就会出现以下的错误 :
Traceback (most recent call last):
File "D:/PycharmProjects/untitled2/moduleA.py", line 1, in
from moduleB import b
File "D:\PycharmProjects\untitled2\moduleB.py", line 2, in
from moduleA import c
File "D:\PycharmProjects\untitled2\moduleA.py", line 1, in
from moduleB import b
ImportError: cannot import name b
这就是循环引用导致的
导入的实质
导入其实是要将 被导入模块所有的顶格代码都执行一遍,遇到函数和类的定义会作申明。
如果b模块中有这么一句
print 'bbb'
你在a模块impot b时就会 执行 print ‘bbb’这一句。
回到循环引用中,首先导入B,进入B中,发现B中又导入了A又回到A中,但是A又导入B这就形成了循环引用。
解法1:直接导入模块名,通过模块调用其中的函数
import moduleB
def a():
print 'aaaaaaaa'
moduleB.b()
def c():
print 'cccccc'
if __name__ == '__main__':
a()
*************************************
import moduleA
def b():
print 'bbbbbbbbbb'
moduleA.c()
具体原因我也不太清楚。
解法2:使用延迟导入(lazy import)
在需要用的函数内部导入,或是在底部导入
moduleB
***************
def b():
print 'bbbbbbbbbb'
c()
from moduleA import c
**************************
或者
def b():
from moduleA import c
print 'bbbbbbbbbb'
c()
解法3:重新设计代码结构,将代码和并或者分离
这个要看情况 而定了,将公共功能的代码分离成单独模块,或者将一些具有关系的代码合并成一个模块。
python循环引用问题怎么解决_python解决循环引用问题相关推荐
- python用for循环求10的因数_python for循环练习(初级)
for循环练习1 for i in range(4):print(i) D:\尚硅谷Python\venv\Scripts\python.exe D:/尚硅谷Python/test.py 0 1 2 ...
- python循环输入姓名并打印_python基础循环的学习记录
一.while循环 如果条件成立(true),重复执行相同操作,条件不符合,跳出循环 while 循环条件: 循环操作 (1)while循环示例 例:输入王晓明5门课程的考试成绩,计算平均成绩i=1 ...
- python两层for循环嵌套的执行过程_Python for循环嵌套
Python for循环嵌套教程 Python for循环嵌套详解 语法 for i in cond1 { # do something for j in cond2 { for k in cond3 ...
- python防止sql注入的方法_python解决sql注入以及特殊字符
python往数据库插入数据, 基础做法是: cur=db.cursor() sql = "INSERT INTO test2(cid, author, content) VALUES (1 ...
- python生成exe启动很慢_python 解决打包的exe启动巨慢问题
写了一些python工具应用程序,然后用pyqt5添加了图形界面.为了将软件分发到其它电脑使用,用pyinstaller打包成exe,一切看似都十分美好,直到运行exe时,那种缓慢迟钝的运行速度让我差 ...
- python将excel转csv乱码_python解决csv文件用excel打开乱码问题
[问题] python输出的csv文件用excel打开,里面的中文会变成乱码,但用window下的记事本或mac下的numbers打开就正常显示. 原因是python输出的文件是utf-8编码写入的, ...
- python循环结构高一信息技术有限公司_Python之循环结构
while循环结构 格式: while 表达式: 语句块 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断:若表达式的值为假, ...
- python打印所有的水仙花数_python使用循环打印所有三位数水仙花数的实例
首先水仙花数是什么? 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿 ...
- python定时开关机的代码_python自动循环定时开关机(非重启)测试
做手机整机测试的,肯定有开关机的需求,关机,几分钟后再开机(一直循环操作测试,就是不能重启):这个需求在关机后就没有办法开机了,任何脚本命令都不行,除非做APP:重启功能的缺点是关机后就立即开机了,需 ...
最新文章
- 猫=图灵机?4项测试证明,「猫猫计算机」可执行任意计算
- python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...
- WPF实现特殊统计图
- 全球科研城市榜出炉:前二十强中国城市占6席,北京居首
- jade的基本使用方法
- ncie全国计算机等级考试,国家信息化工程师认证考试(NCIE)
- 2021-11-08
- Cloakroom BZOJ2794 POI2012(背包问题)
- python爬虫_网易音乐歌单
- lga2066服务器准系统,LGA2066低配版Corei7-7740K再曝光:21WTDP换来100MHz频率
- 基于DragonBoard 410c android系统实现红外遥控功能
- OpenStack组件部署之Placement
- php ml 非线性回归,科学网—非线性回归(迭代法)及其两种拟合曲线:y=a+b*exp(c*x) - 梅卫平的博文...
- java泡泡龙开源_2019级C语言大作业 - 泡泡龙
- 大数据java篇——集合类
- 计算机网络原理实验运城学院,运城学院力学精品课程--实验教学
- 光伏储能联合运行的直流微电网matlab/simulink 储能系统双向DCDC充放电控制 光伏+MPPT控制
- 在cmd命令行运行exe,并在命令行中输入参数的程序示例
- Ubuntu安装出现Error 5 Input/output error解决办法
- 多余的财富只能够买多余的东西
热门文章
- 敬老院管理系统 -分享
- C++都有哪些就业方向?是否应该学习C++?
- js写多余文字用省略号表示,点击可显示隐藏
- 【转载】tIOU意义及其优势
- MATLAB本金p以每年,matlab数学实验--第一章
- 《成为乔布斯》- 一个你不熟悉的乔帮主
- 【互联网品读】谷歌候选人撩美女猎头,被霸气怒怼,码农也有渣渣
- Win10安卓模拟器Visual Studio Emulator for Android使用简介(转)
- Linux双清命令,告诉你什么叫“双清”,为何刷机前要“双清”
- c语言输入三个数求平均值和乘积,C语言输入三个实数型,计算它们的和并输出(要求保留两位小数...