Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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_Python 2.7_Import - Fatal编程技术网

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上) 有人知道这背后的原因吗?经过搜索,我自己找到了答案 本质上,循环导入对于来自…导入

我读过关于如何在python中防止循环导入的内容。我不理解帖子中的一个说法:

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'