python循环引用的解决办法
原文地址:http://blog.csdn.net/handsomekang/article/details/19010407
在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循环引用的解决办法相关推荐
- python 循环引用的解决方法
目录 1.问题描述 2.原因 3.示例 4.解决办法 1.问题描述 编写python代码,运行中出现了:'most likely due to a circular import ' 这样的报错. ...
- Spring IOC 容器源码分析 - 循环依赖的解决办法
1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...
- Python编码错误的解决办法SyntaxError: Non-ASCII character ‘\xe5‘ in file
Python编码错误的解决办法SyntaxError: Non-ASCII character '\xe5' in file [现象] 在编写Python时,当使用中文输出或注释时运行脚本,会提示错 ...
- eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法
eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法 当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, Ser ...
- python垃圾回收 循环引用_在做 Python 循环引用垃圾回收实验中的一个小问题, Python3 的 print 是线程安全的吗?...
以前都听说 Python 循环引用会导致引用数无法清零,所以不能垃圾回收,会内存泄漏,需要删除引用关系或者用 gc.collect()才能进行正常垃圾回收. 但做了下实验,好像还是会自动回收循环引用的 ...
- python报错及解决办法汇总
python报错及解决办法汇总 matplotlib 'gbk' codec can't decode byte 0x9a in position 37: illegal multibyte sequ ...
- php 解决循环引用,excel循环引用如何解决
excel循环引用如何解决? 方法一 需要找到"excel选项",这个地方在Office 2003版本里的"工具"选项里,而在Office 2007版本里不好找 ...
- python循环引用解决 cannot import partially initialize
文章目录 1. 问题 2. 程序结构 3. 健康的引用关系 1. 问题 在python项目中,通常我们要将功能划分为多个文件, 可能出现一些,各模块需要一些公共的值.实例,同时相互存在循环引用的问题. ...
- 解决用户控件循环引用的笨办法
在上一篇中提到使用MagicAjax开发了一个项目,因为做这个项目之前对MagicAjax不是很了解,在里面使用了用户控件,我发现这是一个很致命的错误,用户控件在MagicAjax中用起来很痛苦. ...
最新文章
- 如何用LSTM自编码器进行极端事件预测?(含Python代码)
- centos6.9安装oracle10,2018-10-09 centos6.9 安装cx_Oracle
- Cygwin编译cef
- 【深度学习】陶大程等人编写!最新41页深度学习理论综述
- 关于程序中查询效率的问题
- mybatis学习(10): sql server身份验证和windows身份验证
- java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...
- 团队管理---猴子管理管理法则
- (转)Three.JS学习 9:WEBVR 入门demo
- 图画日记怎么画_期末到了,孩子不会复习,可以试试画思维导图的方法
- PSD模版如何变成网页模版 (转载)
- Code-NFine:NFine权限控制
- 【基于深度学习的人机对弈机器人——视觉识别】
- Android启动模式分析
- 电源控制环稳定性基础理论与调试方法
- Java学习年度总结
- linux中yum provide,linux之yum
- 区块链报告会心得体会3000_学习区块链的心得体会?
- 微信开发相关图书推荐
- win10 安装oracle11g完整教程