python导入模块交叉引用的方法
作者:qq_34146899 发布时间:2021-11-01 07:03:42
标签:python,模块,引用
实际项目中遇到python模块相互引用问题,查资料,终于算是弄明白了。
首先交叉引用或是相互引用,实际上就是导入循环,关于导入循环的详细说明,可见我摘自《python核心编程》第二版的摘抄:Python导入循环方法。
附录给了一种解决交叉引用的方法,试了,不行,但关于交叉引用问题本身说明的很清楚,如果不清楚什么是交叉引用,可看附录一。
循环引用在python圈关注的并不多,语言上没有提供防止循环依赖的机制。
总的来说,应该在总体结构上避免模块之间互相依赖,即:A依赖B,B就不要依赖A,这也是代码重构的一个目标。
对于紧急情况,往往来不及对代码大动。
只要找到导致循环引用的模块(最少两个),把引用关系搞清楚,把某个模块让它在真正需要的时候再导入(一般放到函数里面),或者放到代码的最后导入,这样就可以基本解决模块循环依赖的问题。
一个小窍门:
查看循环引用的报错栈时,会找到两次导入同一个模块的文件。注意在这个附近找。
总结:
在python开发过程中,应尽量避免导入循环(交叉引用),但是,如果你开发了大型的 Python 工程, 那么你很可能会陷入这样的境地。
一些比较靠谱的方法是:
1. 把 import 语句放到方法定义的后面。
2. 将 import 语句移到函数的内部,只有在执行到这个模块时,才会导入相关模块。
来源:https://blog.csdn.net/qq_34146899/article/details/52530844


猜你喜欢
- python3.7 打包成exe程序环境:pycharm2018.1+win7+python3.7工具:pyinstaller1、安装pyi
- 一、问题描述当用JS调用form的方法submit直接提交form的时候,submit事件不响应。为什么?知道的请回复。类比一下,我用inp
- 前言今天呢,笔者想和大家聊聊python+pytest接口自动化中将代码进行封装,只有将测试代码进行封装,才能被测试框架识别执行。例如单个接
- MNIST 数据集介绍MNIST 包含 0~9 的手写数字, 共有 60000 个训练集和 10000 个测试集. 数据的格式为单通道 28
- 本文实例为大家分享了pygame实现弹力球及其变速效果的具体代码,供大家参考,具体内容如下期望:1.球体接触到框体后反弹2.设置速度按键,按
- 在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器。由于本人用惯了宇宙第一IDE(Vis
- MySQL安装说明MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle旗下产品。MySQL 是最流行
- list的话题的确不少,而且,在编程中,用途也非常多。有看官可能要问了,如果要生成一个list,除了要把元素一个一个写上之外,有没有能够让计
- 一、文件的打开和创建>>> f = open('/tmp/test.txt')>>> f
- 一直以来都对编译器和解析器有着很大的兴趣,也很清楚一个编译器的概念和整体的框架,但是对于细节部分却不是很了解。我们编写的程序源代码实际上就是
- 最近分别用vue和Android实现了一个券码复制功能,长按券码会在上方弹出一个拷贝的icon提示,点击icon将券码内容复制到剪贴板。现将
- Excel 中的每一个单元,都会有这些属性:颜色(colors)、number formatting、字体(fonts)、边界(border
- vue项目中引入cesium市面上的前端框架中,Vue+Cesium 可谓是最佳搭档,一般做 Cesium B 端产品的公司都会使用 Vue
- 这篇文章主要介绍了用python写测试数据文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- python是一种美丽的语言 ,应用范围也很广,有很多的人开始学习python开发,对于初学者,这里有5本经典的书籍,如果你打算用看书来学习
- request请求头信息的键会加上HTTP_转换成大写存到request.META中因此你只需要content_range = reques
- 1,效果图 2,实现方法const columns = [ { title: '序号',  
- 在学习和使用各种数据库的过程中,我们常常会遇到聚族索引、非聚族索引、组合索引的概念,这些索引对我们使用数据库,特别是查询的速度的
- Git 服务器搭建上一章节中我们远程仓库使用了 Github,Github 公开的项目是免费的,但是如果你不想让其他人看到你的项目就需要收费
- 本文实例讲述了php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法。分享给大家供大家参考,具体如下:微信支付a