Python 已加载模块的导入行为
鉴于这种情况: Foo.py:Python 已加载模块的导入行为,python,Python,鉴于这种情况: Foo.py: import another_module def foo(): #some code 它由不同的模块调用,其中一些模块已经导入了另一个模块,而另一些模块则没有(让我们将其中一个模块称为“main.py”) 默认行为是什么?模块重新加载了吗?如果是的,(这只是好奇),让我们假设另一个模块在main中的导入和foo.py中的导入之间发生了更改。Python内存中确实有两个不同版本的另一个_模块,一个可用于foo.py,另一个可用于main.py 如果已在主中导入
import another_module
def foo():
#some code
它由不同的模块调用,其中一些模块已经导入了另一个模块,而另一些模块则没有(让我们将其中一个模块称为“main.py”)
foo.py中的导入之间发生了更改。Python内存中确实有两个不同版本的另一个_模块
,一个可用于foo.py
,另一个可用于main.py
主
中导入另一个模块,是否有方法不导入该模块中从另一个模块导入f1,f2
,它是如何工作的。f2只是“添加”了还是重新加载了模块不,模块不会重新加载。您可以使用该功能重新加载模块。导入模块后,将其添加到字典中。如文档所述,您还可以通过更改此变量的内容来强制重新加载模块: 这可以被操纵来强制重新加载模块和其他技巧。请注意,从该字典中删除模块与对相应的模块对象调用reload()不同 关于这种行为,声明没有任何区别。它只控制加载模块的哪些部分被添加到当前作用域: Import语句分两步执行:(1)找到一个模块,必要时对其进行初始化;(2) 在本地命名空间中定义一个或多个名称(import语句发生的范围)。该语句有两种形式,即是否使用from关键字。第一个表单(不带from)对列表中的每个标识符重复这些步骤。具有from的表单执行步骤(1)一次,然后重复执行步骤(2) 您可以自己轻松验证这一点: y.py:
print "Y"
def f1():
pass
def f2():
pass
print "X"
from y import f1, f2
from y import f1
import x
print "reload"
reload(x)
x.py:
print "Y"
def f1():
pass
def f2():
pass
print "X"
from y import f1, f2
from y import f1
import x
print "reload"
reload(x)
测试.py:
print "Y"
def f1():
pass
def f2():
pass
print "X"
from y import f1, f2
from y import f1
import x
print "reload"
reload(x)
python test.py
我同时补充了一个问题