[英]Import vs import on circular import?
经过一番搜索,我自己找到了答案。
从本质上讲,循环导入是from … import …
一个问题,因为它仅在执行模块代码后才返回导入的模块。
为了说明,假设我们在a.py中导入a b.py并导入b。 对于import a
和import b
,我只需查找sys.modules来查找/ b,只需放入一个新模块并返回即可。
另一方面, from a import c
b.py中from a import c
有这样的代码(伪python,类似于a.py中的from b import d
)
if 'a' not in sys.modules:
sys.modules[a] = (A new empty module object)
run every line of code in a.py
add the module a to its parent's namespace
return module 'a'
我们从a.py开始,将b的空模块放到sys.modules并开始执行b.py并在sys.modules中放入一个并执行a.py. 接下来它再次from b import d
命中并在sys.modules中找到b,但它是空的,抛出错误:没有属性d。
PS1:推荐的帖子是错误的。 import ... as ...
适用于循环导入。
PS2: from a import c
与在python 3中导入ac相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.