gpt4 book ai didi

python - sys.modules 和 globals() 中的模块名称

转载 作者:太空狗 更新时间:2023-10-29 20:19:14 24 4
gpt4 key购买 nike

如果我导入一个模块,模块名称会同时出现在 sys.modulesglobals() 中。如果我再次删除它,它会从 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?

我还发现了以下区别:

from mypackage import mymodule
'mypackage' in sys.modules # True
'mymodule' in sys.modules # False !
'mypackage.mymodule' in sys.modules # also True !

虽然答案是 globals() 的补充:

'mypackage' in sys.modules            # False
'mymodule' in sys.modules # True
'mypackage.mymodule' in sys.modules # False

最佳答案

就像任何其他 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

sys.modules 仅在 import 语句中查询。您可以从 sys.modules 中删除一个模块,以便 Python 在下次导入时重新加载它。

关于python - sys.modules 和 globals() 中的模块名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7121802/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com