python循环导入第一行?

时间:2017-10-04 18:19:03

标签: python import python-import circular-dependency circular-reference

我们说我有2个python脚本

第一个:

#X.py
import Y
a = 'list'
print('finish')

和第二个:

#Y.py
import X
z = X.a
print(z)

问题1:

当我首先执行X.py时,代码没有任何问题,但是当我首先执行Y.py时,会出现错误,但为什么会这样?

问题2:

我已经查找了一些循环导入的答案,但我仍然不明白。在这种情况下,从X.py开始,第一行是"导入Y",然后程序应该编译Y.py.Y.py中的第一行是"导入X",所以我想程序再次进入X.py,然后转到Y.py,等等上..... 但为什么没有无限循环发生?

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

回答您的第一个问题:

您收到AttributeError因为当您运行Y.py时,它首先执行导入语句import X。然后,在导入X时,import Y语句首先在X.py中执行,因此代码会在a而不是{{1}中查找变量Y.py }}。您可以在X.py中注释掉import Y然后它可以正常运行来测试。

回答您的第二个问题:

模块只加载一次,无论导入的次数如何。如果发生多次导入,这可以防止模块执行一次又一次地发生。