循环导入如何在Python中完全正常工作

时间:2014-06-26 02:53:13

标签: python import circular-dependency

我有以下代码(使用CPython 3.4运行):

How I expect import to work

基本上红色箭头解释了我期望导入工作的方式: h是在从test2导入之前定义的。 所以当test2导入test1时,它不再是一个空模块(用h) 并且h是test2想要的唯一东西。

我认为这与http://effbot.org/zone/import-confusion.htm

相矛盾

任何提示?

1 个答案:

答案 0 :(得分:1)

您遗漏的是from X import Y,不仅仅是导入Y。它首先导入模块X 。它在页面中提到:

  来自X import 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. 条件为false - 导入测试 - 因此,test2不会查找test2.j - 它现在还不存在。
  4. 希望这有帮助!