解决循环import的问题

原创 2014年02月09日 16:01:45
在python中常常会遇到循环import即circular import的问题。
现实中经常出现这种滑稽的情况,
安装无线网卡的时候,需要上网下载网卡驱动..
安装压缩软件的时候,从网上下载的压缩软件安装程序居然是被压缩了的..

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

举个栗子,
在models.py中,
from server import db
class User(db.Model):
    pass

在server.py中,
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
from models import User

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

解决循环import的方法主要有几种。
1.延迟导入(lazy import)
即把import语句写在方法或函数里面,将它的作用域限制在局部。
这种方法的缺点就是会有性能问题。

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

3.组织代码
出现循环import的问题往往意味着代码的布局有问题。
可以合并或者分离竞争资源。
合并的话就是都写到一个文件里面去。
分离的话就是把需要import的资源提取到一个第三方文件去。
总之就是将循环变成单向。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

python 导入循环问题

在用django中调用某个函数时,报错:can't import get_user_info发现,导入了这个模块啊,为什么导入不成功呢?经人提示,是导入循环的问题。 打开《python核心编程》模块的...

python循环引用的解决办法

在Python中常常会遇到循环import即circular import的问题。 现实中经常出现这种滑稽的情况, 安装无线网卡的时候,需要上网下载网卡驱动.. 安装压缩软件...

python循环引用的解决办法

原文地址:http://blog.csdn.net/handsomekang/article/details/19010407 在python中常常会遇到循环import即circular impo...

Python的循环引用研究(Python版本3.5.1测试通过)

在Python大型项目中,其实是可以出现循环引用的,例如:间接递归时,两个函数分别存放在不同的模块(Python文件)中,而且互相调用。 参考我的代码片中的《循环引用示例代码片》,test1.py(执...

Python的垃圾回收机制深入分析--循环引用

转自:http://www.jb51.net/article/52229.htm 一、概述: Python的GC模块主要运用了“引用计数”(reference counting)来跟踪...

Python之美[从菜鸟到高手]--Python垃圾回收机制及gc模块详解

Python中的垃圾回收是以引用计数为主,标记-清除和分代收集为辅。引用计数最大缺陷就是循环引用的问题,所以Python采用了辅助方法。本篇文章并不详细探讨Python的垃圾回收机制的内部实现,而是以...

#include、#import与@class的使用与头文件循环引用问题

#include #include <>:通常是对系统库文件的引用,编译器会去系统文件目录下查找。 那么这就会导致了头文件循环引用的问题了,通常都是出现虽然你导入了该头文件,但在使用时比如使用`@pr...
  • CNLF14
  • CNLF14
  • 2015-08-19 10:47
  • 2280

import MySQLdb发生ExtractionError问题解决

最近写了个cgi要保存结果到Mysql数据库中,使用了MySQLdb模块,结果总是报错 在本地执行import MySQLdb是没问题的,仅通过web来访问会出错。 ...

关于使用cocoaPods,import导入时第三方库头文件没有提示问题的解决办法

关于使用cocoaPods,import导入时第三方库头文件没有联想提示问题的解决办法

Ubuntu16.04下安装Anaconda,tensorflow以及解决spyder中无法import tensorflow问题

第一步:下载anaconda 到Anaconda官网下载对应的linux anaconda版本。 我这里下载的是此刻的最新版本:Anaconda 4.4.0 for Linux,Python 3....
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)