原文地址: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. 如何用LSTM自编码器进行极端事件预测?(含Python代码)
  2. centos6.9安装oracle10,2018-10-09 centos6.9 安装cx_Oracle
  3. Cygwin编译cef
  4. 【深度学习】陶大程等人编写!最新41页深度学习理论综述
  5. 关于程序中查询效率的问题
  6. mybatis学习(10): sql server身份验证和windows身份验证
  7. java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...
  8. 团队管理---猴子管理管理法则
  9. (转)Three.JS学习 9:WEBVR 入门demo
  10. 图画日记怎么画_期末到了,孩子不会复习,可以试试画思维导图的方法
  11. PSD模版如何变成网页模版 (转载)
  12. Code-NFine:NFine权限控制
  13. 【基于深度学习的人机对弈机器人——视觉识别】
  14. Android启动模式分析
  15. 电源控制环稳定性基础理论与调试方法
  16. Java学习年度总结
  17. linux中yum provide,linux之yum
  18. 区块链报告会心得体会3000_学习区块链的心得体会?
  19. 微信开发相关图书推荐
  20. win10 安装oracle11g完整教程

热门文章

  1. 苹果系统java小游戏_Mac自带小游戏怎么玩?
  2. Linux(三)进程,vim权限,网络
  3. java编程——案例1:模拟购物车
  4. 酒水行业数字化转型解决方案
  5. Anaconda3安装
  6. Spicy 修改代码 实现双屏显示以及鼠标键盘绑定
  7. 机器学习入门基础(二)
  8. 公司挖来一个阿里Java大神,生产环境故障调优很溜
  9. 【ORA-00257:archiver error. Connect internal only, until freed;清理归档日志】
  10. 【数据库学习】关系数据库总结