Python 导入还是循环导入?
我读过关于如何在python中防止循环导入的内容。我不理解帖子中的一个说法:Python 导入还是循环导入?,python,python-2.7,import,Python,Python 2.7,Import,我读过关于如何在python中防止循环导入的内容。我不理解帖子中的一个说法: import package.a # Absolute import and import a # Implicit relative import (deprecated, py2 only) 可以避免循环导入,但 from ... import ... #or import ... as .. 不能(在Python2.x上) 有人知道这背后的原因吗?经过搜索,我自己找到了答案 本质上,循环导入对于来自…导入
import package.a # Absolute import and
import a # Implicit relative import (deprecated, py2 only)
可以避免循环导入,但
from ... import ...
#or
import ... as ..
不能(在Python2.x上)
有人知道这背后的原因吗?经过搜索,我自己找到了答案 本质上,循环导入对于来自…导入…的
是一个问题,因为它仅在执行模块代码后返回导入的模块
为了举例说明,假设我们在b.py中导入了a,并在a.py中导入了b。对于导入a
和导入b
,我只需查找sys.modules以查找a/b,只需放入一个新模块并返回即可
另一方面,b.py中导入c
的有如下代码(伪python,类似于a.py中导入d的)
我们从a.py开始,将b的一个空模块放入sys.modules,然后开始执行b.py,将a放入sys.modules并执行a.py。接下来,它再次点击b import d中的,并在sys.modules中找到b,但它是空的,抛出错误:没有属性d
PS1:引用的帖子是错误的<代码>导入。。。as…
适用于循环导入
PS2:从导入c
与在python 3中导入a.c是一样的经过一些搜索,我自己找到了答案
本质上,循环导入对于来自…导入…
的是一个问题,因为它仅在执行模块代码后返回导入的模块
为了举例说明,假设我们在b.py中导入了a,并在a.py中导入了b。对于导入a
和导入b
,我只需查找sys.modules以查找a/b,只需放入一个新模块并返回即可
另一方面,b.py中导入c
的有如下代码(伪python,类似于a.py中导入d的)
我们从a.py开始,将b的一个空模块放入sys.modules,然后开始执行b.py,将a放入sys.modules并执行a.py。接下来,它再次点击b import d中的,并在sys.modules中找到b,但它是空的,抛出错误:没有属性d
PS1:引用的帖子是错误的<代码>导入。。。as…
适用于循环导入
PS2:从导入c
与在python 3中导入a.c相同
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'