python中怎么样实现交叉importation( 二 )


看图说话:
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: passb.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这样写python中怎么样实现交叉importation

a.py这样写python中怎么样实现交叉importation
【python中怎么样实现交叉importation】

■网友
我觉得模块划分的不太好,也就是分工不明确。首先肯定的是,绝不要使用循环引用;其次呢,循环引用的方法也解决不了你的问题。比较正常的写法应该是:模块b是一个功能模块,负责数据运算,而模块a负责数据读入。在a中可以`import b`,当a中读入数据的时候,调用b中相应的函数来处理数据并返回处理结果
■网友
如果你的ab文件是描述一个类class文件的话,那直接生成对象调用就好啦,如果只是过程文件,建议整合到一块,如果不行,非要分开运行,搞个信号槽吧,b一计算完就通知a修改相关值
■网友
首先,作为一个正在读免疫的收到了这个问题的邀请实在有点违和感...为了消灭“邀请我回答的问题”,勉强答下:作为一个业余编程者,表示要为了解决具体问题写程序时基本上会写个流程图,然后决定怎么干。(顺便可以做好和老板的沟通(=?ω?=))然后严格地使用函数式编程的方法来做,模块之间不产生循环引用,在每个模块内通过__name__ == \u0026#39;__main__\u0026#39;调试好每个函数的执行。__main__里面统一调整各个函数的执行顺序。完成,撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。至于模块之间相互、交叉调用的事,我觉得只要是思路清楚想要解决具体问题,而不是为了琢磨python语言本身,就不要干这种给自己添乱的事情。@Angela Zu的回答就是一个很好的参考,给他个赞。 排名第一的答案实在是看着有些晕,大过年的还是省点脑细胞,能解决问题、过得去就行了...


推荐阅读