1. 模块
当前目录下有一个test.py :
# i am test.py
num = 1
Python console :
>>> import test
>>> test.num
1
在脚本运行期,如果 test.py 中的num 改为2,此时需要热更:
# i am test.py
num = 2
Python console :
>>> from importlib import reload
>>> reload(test)
<module 'test' from '/home/xiaojie/URun.ResearchPrototype/People/Xiaojie/test.py'>
>>> test.num
2
2. 元素(类,变量,函数等)
脚本通过 from...import 导入的元素,上面的方法是无法重载整个模块的:
Python console :
>>> from test import num
>>> num
2
test.py 中的num 改为3:
# i am test.py
num = 3
Python console :
>>> from importlib import reload
>>> reload(test)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'test' is not defined
>>>
>>> reload(num)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/miniconda3/envs/py36/lib/python3.6/importlib/__init__.py", line 139, in reload
raise TypeError("reload() argument must be a module")
TypeError: reload() argument must be a module
traceback 1 是因为 test 没有定义 traceback 2 是因为 num 不是一个模块,reload 传入的参数需要是一个模块
How to reload a module's function in Python?stackoverflow.com![e6c9dac35f8ced5f259ed101ca7e5836.png](https://i-blog.csdnimg.cn/blog_migrate/a016535ad4ffb50baed831dec10fe46e.png)
Python console :
>>> import sys
>>> from importlib import reload
>>> reload(sys.modules['test'])
>>> from test import num
>>> num
3