如果我导入模块,模块名称将同时显示在sys.modules
和globals()
.如果我再次删除它,它将被删除globals()
,但仍然驻留在sys.modules
.为什么会这样?
import mymodule
'mymodule' in globals() # True
'mymodule' in sys.modules # True
del mymodule
'mymodule' in globals() # False
'mymodule' in sys.modules # Still True, why?
Run Code Online (Sandbox Code Playgroud)
我还发现了以下不同之处:
from mypackage import mymodule
'mypackage' in sys.modules # True
'mymodule' in sys.modules # False !
'mypackage.mymodule' in sys.modules # also True !
Run Code Online (Sandbox Code Playgroud)
而答案是互补的globals()
:
'mypackage' in sys.modules # False
'mymodule' in sys.modules # True
'mypackage.mymodule' in sys.modules # False
Run Code Online (Sandbox Code Playgroud)
就像任何其他 Python 对象一样,模块将继续存在,直到不再有对其的引用。换句话说,sys.modules
它的行为就像一个普通的字典,并且
import mymodule
lst = {mymodule.__name__: mymodule}
'mymodule' in globals() # True
'mymodule' in lst # True
del mymodule
'mymodule' in globals() # False
'mymodule' in lst # Still True
Run Code Online (Sandbox Code Playgroud)
sys.modules
仅就进口声明进行咨询。您可以从中删除模块,sys.modules
以便 Python 在下次导入时重新加载它。
归档时间: |
|
查看次数: |
5205 次 |
最近记录: |