如何理解python中的导入?

时间:2019-03-29 04:04:33

标签: python import

我在同一目录中有a.pyb.py。在a.py中,代码为

A = 'a1'

from b import B

print(B)

在b.py中,代码为

B = 'b1'

from a import A

print(A)

现在运行a.py,结果是

b1
a1
b1

我不明白。有人会解释吗?谢谢!

1 个答案:

答案 0 :(得分:1)

这个问题似乎集中在执行顺序上。这与循环导入结合在一起。

linked answer中陈述了循环规则,我不同意重复的规则:

  1. 如果尚未导入模块,请执行它。
  2. 否则,只需返回它即可,无论其原始导入是否完成。

现在,执行顺序:

  1. 运行A
  2. A导入b,它不存在,因此被执行。
  3. B导入B,它不存在(作为导入)并且已执行。
  4. 新的A运行。但这一次导入B时,它已经存在并返回了。幸运的是,我们已经声明了b1。例如,如果我们在import语句之后更改它,事情将会变得很奇怪。如果我们在导入后首先声明它,事情将会崩溃。
  5. A完成其运行。
  6. B完成其运行。
  7. 首字母a完成其运行。

这就是您得到的打印语句的顺序。请务必注意,此处的执行是完全线性的。