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函数载入并运行了文件最新版本的代码,如果已经在另一个窗口修改并保存了它,拿奖反映出修改变化
这允许你在当前交互会话过程中编辑并改进代码

所以是在交互模式下才有用???

以后再懂把

posted @ 2022-04-15 15:34  欧欧欧子  阅读(23)  评论(0编辑  收藏  举报