python导入模块交叉引用的方法


Posted in Python onJanuary 19, 2019

实际项目中遇到python模块相互引用问题,查资料,终于算是弄明白了。

首先交叉引用或是相互引用,实际上就是导入循环,关于导入循环的详细说明,可见我摘自《python核心编程》第二版的摘抄:Python导入循环方法。

附录给了一种解决交叉引用的方法,试了,不行,但关于交叉引用问题本身说明的很清楚,如果不清楚什么是交叉引用,可看附录一。

循环引用在python圈关注的并不多,语言上没有提供防止循环依赖的机制。

总的来说,应该在总体结构上避免模块之间互相依赖,即:A依赖B,B就不要依赖A,这也是代码重构的一个目标。

对于紧急情况,往往来不及对代码大动。

只要找到导致循环引用的模块(最少两个),把引用关系搞清楚,把某个模块让它在真正需要的时候再导入(一般放到函数里面),或者放到代码的最后导入,这样就可以基本解决模块循环依赖的问题。

一个小窍门:

查看循环引用的报错栈时,会找到两次导入同一个模块的文件。注意在这个附近找。

总结:

在python开发过程中,应尽量避免导入循环(交叉引用),但是,如果你开发了大型的 Python 工程, 那么你很可能会陷入这样的境地。

一些比较靠谱的方法是:

1. 把 import 语句放到方法定义的后面。

2. 将 import 语句移到函数的内部,只有在执行到这个模块时,才会导入相关模块。

以上这篇python导入模块交叉引用的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在Python中操作列表之List.append()方法的使用
May 20 Python
Python实现的简单算术游戏实例
May 26 Python
python中pandas.DataFrame排除特定行方法示例
Mar 12 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
在PyCharm中批量查找及替换的方法
Jan 20 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
使用python画社交网络图实例代码
Jul 10 Python
基于Python实现船舶的MMSI的获取(推荐)
Oct 21 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
Mysql数据库反向生成Django里面的models指令方式
May 18 Python
Python爬虫实现百度翻译功能过程详解
May 29 Python
python opencv检测直线 cv2.HoughLinesP的实现
Jun 18 Python
python添加模块搜索路径和包的导入方法
Jan 19 #Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 #Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 #Python
在pycharm 中添加运行参数的操作方法
Jan 19 #Python
解决项目pycharm能运行,在终端却无法运行的问题
Jan 19 #Python
Pycharm以root权限运行脚本的方法
Jan 19 #Python
Python自定义一个类实现字典dict功能的方法
Jan 19 #Python
You might like
Discuz!下Memcache缓存实现方法
2010/05/28 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
php实现向javascript传递数组的方法
2015/07/27 PHP
PHP实现文字写入图片功能
2019/02/18 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
jquery maxlength使用说明
2011/09/09 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
使用C++为node.js写扩展模块
2015/04/22 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
原生js实现图片放大缩小计时器效果
2017/01/20 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
详解使用PM2管理nodejs进程
2017/10/24 NodeJs
vue cli升级webapck4总结
2018/04/04 Javascript
微信小程序实现城市列表选择
2018/06/05 Javascript
浅谈KOA2 Restful方式路由初探
2019/03/14 Javascript
微信小程序 Storage更新详解
2019/07/16 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
python数据化运营的重要意义
2019/11/25 Python
Python3实现建造者模式的示例代码
2020/06/28 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
StubHub新加坡:购买和出售全球活动门票
2017/03/10 全球购物
ECCO爱步加拿大官网:北欧丹麦鞋履及皮具品牌
2017/07/08 全球购物
医生实习工作总结的自我评价
2013/09/27 职场文书
污水厂厂长岗位职责
2014/01/04 职场文书
服装设计专业求职信
2014/06/16 职场文书
团日活动总结报告
2014/06/25 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
拾金不昧表扬稿
2015/01/16 职场文书
团代会闭幕词
2015/01/28 职场文书
2015迎新晚会开场白
2015/05/29 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers
Python机器学习之决策树和随机森林
2021/07/15 Javascript
关于MySQL中explain工具的使用
2023/05/08 MySQL