如何在Python究竟圆形进口工作(How does circular import work ex

2019-10-29 02:56发布

我有以下代码(与CPython的3.4上运行):

基本上,红色箭头解释我是如何预计进口工作:h为test2的导入之前定义。 所以,当test2的进口TEST1它不是一个空的模块了(与H)和H为test2的希望嘛。

我认为,这个矛盾http://effbot.org/zone/import-confusion.htm

任何提示?

Answer 1:

什么你错过的是,事实上from X import Y ,并不仅仅进口Y 。 它首先导入模块X。 它在网页中提到:

从X进口A,B,C导入模块X,并且会在当前命名空间中给定对象的引用。 或者换句话说,你现在可以使用a和b和c在你的程序。

所以,这种说法:

from test import h

不停止进口,当它到达的定义h

让我们来更改文件:

test.py

h = 3
if __name__ != '__main__': #check if it's imported
    print('I'm still called!')
...

当您运行test.py ,你会得到I'm still called! 之前的错误。

条件检查脚本是否是进口与否。 在你编辑的代码,如果你添加的条件下,你会print ,只有当它作为主要的脚本,而不是进口的脚本吧。

下面是一些帮助:

  1. 测试进口TEST2(h定义)
  2. test2的进口测试,那么它满足条件。
  3. 条件是假的-测试是进口的- ,因此,测试2是不会找test2.j -它不存在,只是还没有。

希望这可以帮助!



文章来源: How does circular import work exactly in Python