Python之reload流程实例代码解析


Posted in Python onJanuary 29, 2018

本文研究的主要是Python之reload流程的相关内容,具体如下。

在Python中,reload() 用于重新载入之前载入的模块。

reload() 函数语法:

reload(module)

Python中 import 只执行一次,后续的 import 仅仅在 sys.modules 中查找是否存在对应的模块对象,而对于源文件进行修改后想要立即重新导入该文件而不想整体重新执行程序时, reload 就在该处派上用途了。在实际中,测试代码修改结果,或者对于不能停止的服务需要动态改变运行行为 reload 是非常有用的。

reload 的执行流程如下所示:

1)在 sys.modules 中查找到对应模块名的模块对象;

2)针对该模块名的 执行文件 属性,找到对应文件并重新编译该文件执行;

3)将代码执行中产生的对象依次更新到原模块对象的属性中;

从上面执行流程中我们可以看到如下几点:

1)模块对象是可变的,在 reload 执行过程中只是修改了该模块对象,因此在 reload 后原来的引用还是指向该模块对象;

2)reload 过程中,文件中代码重新执行,创建新的对象并绑定到模块的属性中;

3)reload 模块中的 import 和 reload 流程与该模块是否 reload 无关,一个模块 reload 并不会导致其中的 import 递归重新载入;

4)对于 from * import * 来说其相当于是在本地创建了同名的变量指向模块中的同名属性所引用对象, reload 会创建新对象(部分不可变对象除外),其仍然指向旧变量,一般情况下需要重新赋值;

基于此,测试如下代码:

#----- 被导入代码 reloadImported.py ------ 
print(' excute code in imported file') 
x = [] 
y = 1 
 
#----- 测试代码 test.py -------- 
sep = ': ' 
print('---- import module ----') 
import reloadImported 
from reloadImported import x 
print(' id(reloadImported)', id(reloadImported), sep=sep) 
print(' id(reloadImported.x)', id(reloadImported.x), sep=sep) 
print(' id(reloadImported.y)', id(reloadImported.y), sep=sep) 
print(' id(x)', id(x), sep=sep) 
 
print('---- reload module ----') 
from importlib import reload 
reload(reloadImported) 
print(' id(reloadImported)', id(reloadImported), sep=sep) 
print(' id(reloadImported.x)', id(reloadImported.x), sep=sep) 
print(' id(reloadImported.y)', id(reloadImported.y), sep=sep) 
print(' id(x)', id(x), sep=sep) 
from reloadImported import x 
print(' new x id(x)', id(x), sep=sep)

执行结果如下所示:

---- import module ---- 
 excute code in imported file 
 id(reloadImported): 30322880 
 id(reloadImported.x): 29841208 
 id(reloadImported.y): 1502597584 
 id(x): 29841208 
---- reload module ---- 
 excute code in imported file 
 id(reloadImported): 30322880 
 id(reloadImported.x): 29842088 
 id(reloadImported.y): 1502597584 
 id(x): 29841208 
 new x id(x): 29842088

总结

以上就是本文关于Python之reload流程实例代码解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
分享15个最受欢迎的Python开源框架
Jul 13 Python
python3生成随机数实例
Oct 20 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
Python 私有函数的实例详解
Sep 11 Python
Python实现感知器模型、两层神经网络
Dec 19 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
pyqt5 comboBox获得下标、文本和事件选中函数的方法
Jun 14 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
django实现类似触发器的功能
Nov 15 Python
Python实现word2Vec model过程解析
Dec 16 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
浅谈matplotlib 绘制梯度下降求解过程
Jul 12 Python
Python中的默认参数实例分析
Jan 29 #Python
Python使用遗传算法解决最大流问题
Jan 29 #Python
Python subprocess模块详细解读
Jan 29 #Python
python微信跳一跳游戏辅助代码解析
Jan 29 #Python
Python面向对象之继承代码详解
Jan 29 #Python
Python多线程threading和multiprocessing模块实例解析
Jan 29 #Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 #Python
You might like
php下使用以下代码连接并测试
2008/04/09 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP编程 SSO详细介绍及简单实例
2017/01/13 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
Yii框架通过请求组件处理get,post请求的方法分析
2019/09/03 PHP
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
nodejs的10个性能优化技巧
2014/07/15 NodeJs
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
jQuery加载及解析XML文件的方法实例分析
2017/01/22 Javascript
让nodeJS支持ES6的词法----babel的安装和使用方法
2017/07/31 NodeJs
View.post() 不靠谱的地方你知道多少
2017/08/29 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
python getopt详解及简单实例
2016/12/30 Python
基于Django框架利用Ajax实现点赞功能实例代码
2018/08/19 Python
python找出完数的方法
2018/11/12 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
2020/07/20 Python
pandas参数设置的实用小技巧
2020/08/23 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
CSS3 input框的实现代码类似Google登录的动画效果
2020/08/04 HTML / CSS
入党思想汇报
2014/01/05 职场文书
高级销售求职信
2014/02/21 职场文书
销售人员求职的自我评价分享
2014/03/15 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2014社区健康教育工作总结
2014/12/16 职场文书
团员自我评价范文
2015/03/10 职场文书
2015年社区教育工作总结
2015/05/13 职场文书
社区安全温馨提示语
2015/07/14 职场文书
校园广播稿范文
2015/08/19 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python