原文地址:http://blog.csdn.net/handsomekang/article/details/19010407

在python中常常会遇到循环import即circular import的问题。

现实中经常出现这种滑稽的情况,

安装无线网卡的时候,需要上网下载网卡驱动..

安装压缩软件的时候,从网上下载的压缩软件安装程序居然是被压缩了的..

循环依赖就类似于这种情况。

举个栗子,

在models.py中,

  1. from server import db
  2. class User(db.Model):
  3. pass

在server.py中,

  1. from flask import Flask
  2. from flask.ext.sqlalchemy import SQLAlchemy
  3. app = Flask(__name__)
  4. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db'
  5. db = SQLAlchemy(app)
  6. from models import User

这样就产生了循环import的问题。

解决循环import的方法主要有几种。

1.延迟导入(lazy import)

即把import语句写在方法或函数里面,将它的作用域限制在局部。

这种方法的缺点就是会有性能问题。

2.将from xxx import yyy改成import xxx;xxx.yyy来访问的形式

3.组织代码

出现循环import的问题往往意味着代码的布局有问题。

可以合并或者分离竞争资源。

  • 合并的话就是都写到一个文件里面去。
  • 分离的话就是把需要import的资源

python循环引用的解决办法相关推荐

  1. python 循环引用的解决方法

    目录 1.问题描述 2.原因 3.示例 4.解决办法 1.问题描述 编写python代码,运行中出现了:'most likely due to a circular import '  这样的报错. ...

  2. Spring IOC 容器源码分析 - 循环依赖的解决办法

    1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...

  3. Python编码错误的解决办法SyntaxError: Non-ASCII character ‘\xe5‘ in file

    Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file  [现象] 在编写Python时,当使用中文输出或注释时运行脚本,会提示错 ...

  4. eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法

    eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法  当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, Ser ...

  5. python垃圾回收 循环引用_在做 Python 循环引用垃圾回收实验中的一个小问题, Python3 的 print 是线程安全的吗?...

    以前都听说 Python 循环引用会导致引用数无法清零,所以不能垃圾回收,会内存泄漏,需要删除引用关系或者用 gc.collect()才能进行正常垃圾回收. 但做了下实验,好像还是会自动回收循环引用的 ...

  6. python报错及解决办法汇总

    python报错及解决办法汇总 matplotlib 'gbk' codec can't decode byte 0x9a in position 37: illegal multibyte sequ ...

  7. php 解决循环引用,excel循环引用如何解决

    excel循环引用如何解决? 方法一 需要找到"excel选项",这个地方在Office 2003版本里的"工具"选项里,而在Office 2007版本里不好找 ...

  8. python循环引用解决 cannot import partially initialize

    文章目录 1. 问题 2. 程序结构 3. 健康的引用关系 1. 问题 在python项目中,通常我们要将功能划分为多个文件, 可能出现一些,各模块需要一些公共的值.实例,同时相互存在循环引用的问题. ...

  9. 解决用户控件循环引用的笨办法

    在上一篇中提到使用MagicAjax开发了一个项目,因为做这个项目之前对MagicAjax不是很了解,在里面使用了用户控件,我发现这是一个很致命的错误,用户控件在MagicAjax中用起来很痛苦.   ...

最新文章

  1. make时候说找不到makefile_找不到答案的时候,就去看一看这个世界
  2. Qtum量子链研究院:Plasma扩容方案详解(上)
  3. mex文件用matlab能打开吗,matlab中mex文件编译运行的问题
  4. juypter 不省略_常用pandas清洗数据命令
  5. Android使用Glide框架加载网络图片(解决无报错图片不显示问题)
  6. mssql 动态行转列。
  7. Linux /etc/login.defs配置文件
  8. 2020年上海将初步建成“泛在化、融合化、智敏化”智慧城市
  9. 锐起无盘服务器只能是什么系统,安装锐起无盘客户机系统要注意什么
  10. 传统制造业和工业如何和大数据进行结合
  11. 技嘉ide模式怎么改_技嘉主板bios设置ide
  12. RNA 3. SCI 文章中基于TCGA 差异表达基因之 DESeq2
  13. three.js 05-04 之 BoxGeometry 几何体
  14. c语言写街机,19年了!街机模拟器MAME正式成为开源软件
  15. pattern和match的用法 java篇
  16. CYK 算法 Python 实现
  17. 研究开源项目发现的一个人性化的Go语言库
  18. DELL笔记本BIOS密码破解
  19. Oracle学生表练习
  20. 洛谷B2075 幂的末尾(解决pow数据爆炸,取后n位,不足补零)

热门文章

  1. 判断点是否在图形(矩形、椭圆、多边形)内的算法(一)
  2. 使用woo 语言开发 sockets4 sockets5 http https代理完整记录
  3. 计算机中丟失Slc.dll,调试符号不会加载slc.dll和sppc.dll
  4. python基础教程学习笔记 —字符串
  5. 逻辑回归LR模型简介
  6. MOOS-ivp 使用qt创建一个moosapp
  7. Cisco ASA、FTD和HyperFlex HX的漏洞分析复现
  8. 目标检测中的数据增强,包括bbox的变换
  9. java中0是真是假_为什么0为假?
  10. 整理总结:《量化交易——如何建立自己的算法交易事业》