我试图允许第二个模块在循环导入中修改第一个模块的变量,但似乎不起作用。在
我有两个问题:1)为什么这不起作用/从语言发展的角度来看,这是为什么?2)有没有任何简单的解决方案可以让我以稍微不同的方式做同样的事情?在
a.py:
import b
test1 = 'a'
test2 = None
test3 = '3'
if __name__ == '__main__':
print test1, test2, test3 #prints 'a', None, 3
b.changeVars()
print test1, test2, test3 #prints 'a', None, 3 (i.e. nothing has changed)
备份:
^{pr2}$
当
b.py
试图import a
时,sys.modules
中没有它的条目,因为该条目位于__main__
之下。这将导致导入机制重新导入模块并将其置于名称a
下。所以现在有一个a
模和一个完全无关的__main__
模。将b.py
更改为类似这样的值就可以了。在收益率
^{pr2}$为了得到一个更好的例子,请考虑以下文件:
^{3}$以及
哪些输出
这清楚地表明}是指两个不同的对象。解决方案可能是将以下内容作为
sys.modules['a']
和{a.py
的第一行这样做也允许任何其他模块
import a
。总的来说,我真的不明白你为什么要这么做。也许有更好的方法来完成这件事。在完成这种任务的一个更好的方法是在要更改变量的同一个模块中声明变量。在本例中,
b
。然后在a
内导入b
,你可以做任何你想做的事情想要。你可以使用未更改的变量,就像在a
中声明它们一样,也可以更改它们。看看这个:b.py公司
a.py
^{pr2}$注意:在这种情况下不需要循环导入;循环导入会导致您的问题,因为它的行为不像您认为的那样。因此,只需一次导入,您就拥有了代码所需的所有内容,并且可以在两个模块中修改这些变量值。在
相关问题 更多 >
编程相关推荐