Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何理解python中的导入?_Python_Import - Fatal编程技术网

如何理解python中的导入?

如何理解python中的导入?,python,import,Python,Import,我在同一个目录中有a.py和b.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 我不明白。有人能解释一下吗?谢谢 这个问题似乎集中在执行顺序上。这与循环导入相结合 循环规则在中有规定,我不同意重复: 如果模块尚未导入,请执行它 否则,不管原始导入是否完成,只需将其返回即可 现在,执行顺序: 运行A A导

我在同一个目录中有
a.py
b.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

我不明白。有人能解释一下吗?谢谢

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

循环规则在中有规定,我不同意重复:

  • 如果模块尚未导入,请执行它
  • 否则,不管原始导入是否完成,只需将其返回即可 现在,执行顺序:

  • 运行
    A
  • A
    导入不存在的
    b
    ,因此执行
  • B
    导入
    B
    ,该导入不存在(作为导入)并已执行
  • 新的
    A
    运行。但这次导入
    B
    时,它已经存在并返回。幸运的是,我们已经声明了
    b1
    。例如,如果我们在import语句之后更改它,事情会变得很奇怪。如果我们在进口后先申报的话,事情就坏了
  • A
    完成其运行
  • B
    完成其运行
  • 初始a完成其运行
    这是您得到的打印语句的顺序。需要注意的是,这里的执行是完全线性的

    顺便说一句,这是一个循环导入。所以,这个问题没有单一的解决方案?我想每种语言都会遇到这个问题。只是好奇:-)@Nishant好吧,如果你什么都不做,你就会陷入一个导入循环,所以作为一个语言设计师,你要么以某种方式打破这个循环,要么完全不允许它。从完全理论的角度来看,让这种情况永远持续下去可能是“正确的”。