idea中reload all from disk_Python3的reload重载技巧

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

Python console :

>>> import sys
>>> from importlib import reload
>>> reload(sys.modules['test'])
>>> from test import num 
>>> num
3
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值