当项目中的模块过多,或功能划分不够清晰时会出现循环引用的问题,如下

有两个模块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解决循环引用问题相关推荐

  1. 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 ...

  2. python循环输入姓名并打印_python基础循环的学习记录

    一.while循环 如果条件成立(true),重复执行相同操作,条件不符合,跳出循环 while 循环条件: 循环操作 (1)while循环示例 例:输入王晓明5门课程的考试成绩,计算平均成绩i=1 ...

  3. python两层for循环嵌套的执行过程_Python for循环嵌套

    Python for循环嵌套教程 Python for循环嵌套详解 语法 for i in cond1 { # do something for j in cond2 { for k in cond3 ...

  4. python防止sql注入的方法_python解决sql注入以及特殊字符

    python往数据库插入数据, 基础做法是: cur=db.cursor() sql = "INSERT INTO test2(cid, author, content) VALUES (1 ...

  5. python生成exe启动很慢_python 解决打包的exe启动巨慢问题

    写了一些python工具应用程序,然后用pyqt5添加了图形界面.为了将软件分发到其它电脑使用,用pyinstaller打包成exe,一切看似都十分美好,直到运行exe时,那种缓慢迟钝的运行速度让我差 ...

  6. python将excel转csv乱码_python解决csv文件用excel打开乱码问题

    [问题] python输出的csv文件用excel打开,里面的中文会变成乱码,但用window下的记事本或mac下的numbers打开就正常显示. 原因是python输出的文件是utf-8编码写入的, ...

  7. python循环结构高一信息技术有限公司_Python之循环结构

    while循环结构 格式: while 表达式: 语句块 执行流程:当程序执行到while语句时,首先判断表达式的真假.若表达式的值为真,则执行缩进的语句块,之后返回表达式继续判断:若表达式的值为假, ...

  8. python打印所有的水仙花数_python使用循环打印所有三位数水仙花数的实例

    首先水仙花数是什么? 水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI).自恋数.自幂数.阿姆斯壮数或阿 ...

  9. python定时开关机的代码_python自动循环定时开关机(非重启)测试

    做手机整机测试的,肯定有开关机的需求,关机,几分钟后再开机(一直循环操作测试,就是不能重启):这个需求在关机后就没有办法开机了,任何脚本命令都不行,除非做APP:重启功能的缺点是关机后就立即开机了,需 ...

最新文章

  1. 猫=图灵机?4项测试证明,「猫猫计算机」可执行任意计算
  2. python捕获全局异常统一管理_python中如何用sys.excepthook来对全局异常进行捕获、显示及输出到error日志中...
  3. WPF实现特殊统计图
  4. 全球科研城市榜出炉:前二十强中国城市占6席,北京居首
  5. jade的基本使用方法
  6. ncie全国计算机等级考试,国家信息化工程师认证考试(NCIE)
  7. 2021-11-08
  8. Cloakroom BZOJ2794 POI2012(背包问题)
  9. python爬虫_网易音乐歌单
  10. lga2066服务器准系统,LGA2066低配版Corei7-7740K再曝光:21WTDP换来100MHz频率
  11. 基于DragonBoard 410c android系统实现红外遥控功能
  12. OpenStack组件部署之Placement
  13. php ml 非线性回归,科学网—非线性回归(迭代法)及其两种拟合曲线:y=a+b*exp(c*x) - 梅卫平的博文...
  14. java泡泡龙开源_2019级C语言大作业 - 泡泡龙
  15. 大数据java篇——集合类
  16. 计算机网络原理实验运城学院,运城学院力学精品课程--实验教学
  17. 光伏储能联合运行的直流微电网matlab/simulink 储能系统双向DCDC充放电控制 光伏+MPPT控制
  18. 在cmd命令行运行exe,并在命令行中输入参数的程序示例
  19. Ubuntu安装出现Error 5 Input/output error解决办法
  20. 多余的财富只能够买多余的东西

热门文章

  1. 敬老院管理系统 -分享
  2. C++都有哪些就业方向?是否应该学习C++?
  3. js写多余文字用省略号表示,点击可显示隐藏
  4. 【转载】tIOU意义及其优势
  5. MATLAB本金p以每年,matlab数学实验--第一章
  6. 《成为乔布斯》- 一个你不熟悉的乔帮主
  7. 【互联网品读】谷歌候选人撩美女猎头,被霸气怒怼,码农也有渣渣
  8. Win10安卓模拟器Visual Studio Emulator for Android使用简介(转)
  9. Linux双清命令,告诉你什么叫“双清”,为何刷机前要“双清”
  10. c语言输入三个数求平均值和乘积,C语言输入三个实数型,计算它们的和并输出(要求保留两位小数...