重新加载Python中的模块?

reload()-重新加载之前已导入模块或加载模块。在交互式会话中反复运行测试脚本的情况下,这很方便,它始终使用我们正在开发的模块的第一个版本,即使我们对代码进行了更改。在这种情况下,我们需要确保重新加载模块。

传递给的参数reload()必须是之前成功导入的模块对象。

语法

import importlib
importlib.reload(sys)

示例

>>> import sys
>>> import importlib
>>> importlib.reload(sys)
<module 'sys' (built-in)>

但是,如果尝试重新加载之前未导入的模块,则可能会收到错误消息。

>>> import importlib
>>> importlib.reload(sys)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
importlib.reload(sys)
NameError: name 'sys' is not defined

几点了解,何时reload()执行-

  • 重新编译Python模块的代码并重新执行模块级别的代码,从而定义了一组新对象,这些对象通过重新使用最初加载模块的加载器来绑定到模块字典中的名称。但是,模块的初始化功能不会再次加载

  • 仅在旧对象的引用计数降至零后才对其进行回收。

  • 模块命名空间中的名称将更改为新对象(如果有)。

  • 旧对象的其他引用(如模块外部的名称)不一定引用新对象,并且如果需要,必须在它们发生的每个命名空间中进行更新。