Python之reload流程实例代码解析
作者:spirit_djy 发布时间:2022-04-19 11:42:24
本文研究的主要是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
来源:http://blog.csdn.net/spirit_djy/article/details/50491593
猜你喜欢
- 前言:学过C语言肯定接触过排序问题,我们最常用的也就是冒泡排序、选择排序、插入排序……等等,同样
- 前言最近看到一个题目,看似很简单,其实里面有很深的意义,题目是Python 表达式 i += x 与 i = i + x 等价吗?如果你的回
- 新手学习Python,之前在网上看见一位朋友写的40行Python代码搞定京东秒杀,想在淘宝上帮女朋友抢玩偶,所以就照猫画虎的写了下淘宝的秒
- 今天因工作需要写了个小程序,用于在图片集中自动抽取需要的照片。该程序只是实现了基本功能,还有很多需要完善的地方,展示出来算是给自己鼓鼓气吧。
- 设置自动生成作者信息1、file->settings->Editor->file and code templates-&
- 可以把多个页面相同的部分提取出来,放在一个母板里,这些页面只需要继承这个母板就好了通常会在母板中定义页面专用的 CSS 块和 JS 块,方便
- 一、前言今天学习视频时课后作业是找出1000以内既是素数又是回文数的数,写代码这个很容易,结果一运行遇到了bug,输出结果跟预期不一样,调试
- 首先看官网的DataFrame.plot( )函数DataFrame.plot(x=None, y=None, kind='line
- 某些杀毒软件会把正常的asp文件误认为是asp木马文件,而自动删除,影响正常使用。下面方法可能会有效避免被杀毒软件删除把dim t
- XML、 XLink、 Namespace、 DTD、 Schema、 CSS、 XHTML...假如你从未接触XML, 或许你会感觉不知从
- 在CMD控制台进入Jupyter notebook之前,先激活安装了该模块的配置环境,再启动jupyter notebook,问题完美解决。
- 需要默认选中时,定义一个变量 var cityId=城市id 下面是js代码 function readxml() { var XmlDoc
- 如何要恢复Master数据库呢?方法1:重装SQL,但是数据就Over掉了方法2:重建Master Rebuildm.exe 用到SQL的安
- 本文实例讲述了Python使用matplotlib绘制余弦的散点图。分享给大家供大家参考,具体如下:一 代码import numpy as
- 在PyCharm2017中同目录下import其他模块,会出现No model named ...的报错,但实际可以运行这是因为PyChar
- scipy.optimize函数使用简单使用scipy.optimize,训练逻辑回归损失函数,得到权值。scipy.optimize模块包
- 目录1.随机取小数:2.整数的随机选取:3.随机列表取数,元素打乱:总结1.随机取小数:import randomprint(random.
- 本文实例讲述了Python实现的求解最大公约数算法。分享给大家供大家参考,具体如下:使用Python求解两个数的最大公约数的时候用到了前面介
- 在开发应用程序时,客户端(前端页面或APP)与服务端交互是在所难免的,在交互过程传递数据时,最通用和流行格式便是JSON,Go语言提供了en
- 近来学习tp5的过程中,项目中有个发帖功能,选择主题图片。如下:利用原始的文件上传处理,虽然通过原始js语句能实时显示上传图片,但是这样的话