如何理解python中的导入?

but*_*eht 5 python import

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

A = 'a1'

from b import B

print(B)
Run Code Online (Sandbox Code Playgroud)

在 b.py 中,代码是

B = 'b1'

from a import A

print(A)
Run Code Online (Sandbox Code Playgroud)

现在运行a.py,结果是

b1
a1
b1
Run Code Online (Sandbox Code Playgroud)

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

kab*_*nus 1

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

循环规则在链接的答案中说明,我不同意它是重复的:

  1. 如果模块尚未导入,则执行它。
  2. 否则,无论其原始导入是否完成,都直接返回。

现在,执行顺序:

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

这就是您得到的打印语句的顺序。重要的是要注意这里的执行是完全线性的。