当import的模块内容更新后,应如何重新加载该模块以反映变化?
- 内容介绍
- 文章标签
- 相关推荐
本文共计387个文字,预计阅读时间需要2分钟。
在程序执行过程中,虽然`a.py`中通过`import`导入了`b.py`,但`b.py`的内容发生了变化。由于`import`只生效一次,导致`a.py`中使用的`b.py`的方法和变量都是旧的,未能反映`b.py`的最新修改。因此,需要重新导入`b.py`以使用其最新内容。
1、背景
a.py中import了b.py,但是当在程序执行过程中,b.py的内容发生了变化
此时由于import只生效一次的局限,导致a.py中使用到了b.py中的方法和变量都是旧的
所以需要在使用新的b.py内容的地方对b.py进行重新加载
2、解决方法
使用python的reload()方法
py2中reload是内置方法,直接使用
py3中需要from imp import reload进行使用
没有重新加载b的情况:
import bdef sayOld():
print b.name
def changeB():
xxx
# b文件被读写了,内容发生了变化
def sayNew():
print b.name
sayOld()
satNew()
>>>
old
old
重新加载了b的情况:
import bimport os,sys
os.sys.path.append(os.path.dirname(__file__))
# 避免在被引用后找不到模块,我们将模块路径加入到pythonpath中
def sayOld():
print b.name
def changeB():
xxx
# b文件被读写了,内容发生了变化
def sayNew():
reload(b)
print b.name
sayOld()
satNew()
>>>
old
new
更多内容详见微信公众号:Python研究所
本文共计387个文字,预计阅读时间需要2分钟。
在程序执行过程中,虽然`a.py`中通过`import`导入了`b.py`,但`b.py`的内容发生了变化。由于`import`只生效一次,导致`a.py`中使用的`b.py`的方法和变量都是旧的,未能反映`b.py`的最新修改。因此,需要重新导入`b.py`以使用其最新内容。
1、背景
a.py中import了b.py,但是当在程序执行过程中,b.py的内容发生了变化
此时由于import只生效一次的局限,导致a.py中使用到了b.py中的方法和变量都是旧的
所以需要在使用新的b.py内容的地方对b.py进行重新加载
2、解决方法
使用python的reload()方法
py2中reload是内置方法,直接使用
py3中需要from imp import reload进行使用
没有重新加载b的情况:
import bdef sayOld():
print b.name
def changeB():
xxx
# b文件被读写了,内容发生了变化
def sayNew():
print b.name
sayOld()
satNew()
>>>
old
old
重新加载了b的情况:
import bimport os,sys
os.sys.path.append(os.path.dirname(__file__))
# 避免在被引用后找不到模块,我们将模块路径加入到pythonpath中
def sayOld():
print b.name
def changeB():
xxx
# b文件被读写了,内容发生了变化
def sayNew():
reload(b)
print b.name
sayOld()
satNew()
>>>
old
new

