python中怎么样实现交叉importation( 二 )
看图说话:
(渣手绘见谅...)
没有看过CPython的源码,但是我猜有可能是通过一个stack来实现这个circular import的机制的?请大神指正。
出错的原因解释清楚了,那么下一步该怎么实现题主所说的需求呢?当然首先最好的办法就是根本就不要那么写,因为好的设计应该是maximizing cohesion and minimizing coupling的。姑且硬要按照题主的方式的话,其中一种方法可以这样做:
a.py# a.pyarg = 1print(\u0026#39;in a.py, before import b\u0026#39;)import bprint(\u0026#39;in a.py, after import b\u0026#39;)try: result = b.outcome + 100 print(result)except TypeError: pass
b.py# recur2.pyoutcome = Noneprint(\u0026#39;in b.py, before import a\u0026#39;)import aprint(\u0026#39;in b.py, after import a\u0026#39;)outcome = a.arg + 1
运行结果:in a.py, before import bin b.py, before import ain a.py, before import bin a.py, after import bin b.py, after import ain a.py, after import b102
非常的丑陋...所以还是建议题主从一开始就别这么写。
■网友
一般遇见这种情况,我选择把a和b整合到一个文件里……
■网友
不用这么麻烦, b里面加一个return函数直接a里面import b, 把数据用b的属性计算出结果return出来,然后调用这个结果就行.比如b.py这样写
a.py这样写
【python中怎么样实现交叉importation】
■网友
我觉得模块划分的不太好,也就是分工不明确。首先肯定的是,绝不要使用循环引用;其次呢,循环引用的方法也解决不了你的问题。比较正常的写法应该是:模块b是一个功能模块,负责数据运算,而模块a负责数据读入。在a中可以`import b`,当a中读入数据的时候,调用b中相应的函数来处理数据并返回处理结果
■网友
如果你的ab文件是描述一个类class文件的话,那直接生成对象调用就好啦,如果只是过程文件,建议整合到一块,如果不行,非要分开运行,搞个信号槽吧,b一计算完就通知a修改相关值
■网友
首先,作为一个正在读免疫的收到了这个问题的邀请实在有点违和感...为了消灭“邀请我回答的问题”,勉强答下:作为一个业余编程者,表示要为了解决具体问题写程序时基本上会写个流程图,然后决定怎么干。(顺便可以做好和老板的沟通(=?ω?=))然后严格地使用函数式编程的方法来做,模块之间不产生循环引用,在每个模块内通过__name__ == \u0026#39;__main__\u0026#39;调试好每个函数的执行。__main__里面统一调整各个函数的执行顺序。完成,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。至于模块之间相互、交叉调用的事,我觉得只要是思路清楚想要解决具体问题,而不是为了琢磨python语言本身,就不要干这种给自己添乱的事情。@Angela Zu的回答就是一个很好的参考,给他个赞。 排名第一的答案实在是看着有些晕,大过年的还是省点脑细胞,能解决问题、过得去就行了...
推荐阅读
- 北京22家市属医院均开展安检基本实现重点区域安检措施全覆盖
- 长江流域渔民退捕“上岸”实现扩产新致富
- 实现“甜蜜计划”,这对中哈跨国夫妻好甜
- 北京地铁11号线西段三座车站提前实现主体结构封顶
- 怎样成为一名合格的Python程序员?
- python 爬虫,咋获得输入验证码之后的搜索结果
- dart这编程语言现在发展怎么样了,语法与Java,c#很相似,甚至更简洁
- 青年|一汽奔腾T77怎么样?车主吐槽:后排座椅太短,和坐小板凳似的
- python的html5lib这个库咋使用啊我在网上也没有找到相关文档
- 电商网站支付流程的流失率是怎么样的从用户点击充值/支付按钮,到支付完成,其中每一步的流失比率都是咋样的