python学习手册 第三章 调用模块
有三个文件
main.py script1.py script0.py
实验1.验证import导入的是同一个副本,reload可以加载模块的新变动
main调用script1
script1.py
name=“jack”
main.py
import script1 print(script1.name) //如果这里写print(name) 会报错误 name undefined
vs main.py
import script1 //即使用reload也要import
from importlib import reload //书上是imp,但是弹出提示imp已经被importlib替代
reload(script1)
print(script1.name) //要是直接打name也是undefined
结果
import 方式>>> jack (如果)
reload 方式>>> jack
修改一下script1.py为
name=“mark”
再次运行上面两种方法
都是mark 我也不懂为什么“import导入的是同一个副本,reload可以加载模块的新变动”这句话啥意思
2.验证import模块里的模块是否会被重新加载
main调用script1,script1调用script0
script0
grandson = "jack"
script1
import script0 name = script0.grandson
main
import script1 print(script1.name)
vs main
import script1 from importlib import reload reload(script1) print(script1.name)
结果都是jack
但是把script0改成
name="mark"
结果两个也都变成mark
上面俩实验都证明import和reload的区别不是这样用的,只要重新编译了就都会更新
原话是
import只是在每次会话的第一次运行,在第一次导入后,其他的导入都不会再工作,甚至在另一个窗口中改变并保存了模块的源代码也不行
如果想要python在同一次会话中再次运行文件(不停止和重启会话),需要调动imp标准库模块中可用热reload函数
这里的from语句直接从一个模块中复制出一个名字,reload函数载入并运行了文件最新版本的代码,如果已经在另一个窗口修改并保存了它,拿奖反映出修改变化
这允许你在当前交互会话过程中编辑并改进代码
所以是在交互模式下才有用???
以后再懂把