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


Posted in Python onJanuary 19, 2019

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

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

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

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

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

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

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

一个小窍门:

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

总结:

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

一些比较靠谱的方法是:

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

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

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

Python 相关文章推荐
Python socket编程实例详解
May 27 Python
Python 列表排序方法reverse、sort、sorted详解
Jan 22 Python
Python实现小数转化为百分数的格式化输出方法示例
Sep 20 Python
详解Python nose单元测试框架的安装与使用
Dec 20 Python
python构建深度神经网络(续)
Mar 10 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
十行代码使用Python写一个USB病毒
Jun 21 Python
anaconda如何查看并管理python环境
Jul 05 Python
python 发送get请求接口详解
Nov 17 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
Jan 19 Python
教你用Python爬取英雄联盟皮肤原画
Jun 13 Python
Python中基础数据类型 set集合知识点总结
Aug 02 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
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
php switch语句多个值匹配同一代码块应用示例
2014/07/29 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
ExtJS Ext.MessageBox.alert()弹出对话框详解
2010/04/02 Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
javascript轻松实现当鼠标移开时已弹出子菜单自动消失
2013/12/29 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
Javascript writable特性介绍
2015/02/27 Javascript
jQuery的promise与deferred对象在异步回调中的作用
2016/05/03 Javascript
浅谈toLowerCase和toLocaleLowerCase的区别
2016/08/15 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
在Vue中如何使用Cookie操作实例
2017/07/27 Javascript
Nodejs模块的调用操作实例分析
2018/12/25 NodeJs
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
Nuxt.js nuxt-link与router-link的区别说明
2020/11/06 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python编写一个验证码图片数据标注GUI程序附源码
2019/12/09 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
雅诗兰黛美国官网:Estee Lauder美国
2016/07/21 全球购物
高中打架检讨书
2014/02/13 职场文书
迎元旦广播稿
2014/02/22 职场文书
六五普法规划实施方案
2014/03/21 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
python中的mysql数据库LIKE操作符详解
2021/07/01 MySQL
node.js如何自定义实现一个EventEmitter
2021/07/16 Javascript
python读取mnist数据集方法案例详解
2021/09/04 Python
手写实现JS中的new
2021/11/07 Javascript