Python 的reload()方法

2023-11-04

reload()函数将以前导入过的模块再加载一次。重新加载(reload)包括最初导入模块时应用的分析过程和初始化过程。这样就允许在不退出解释器的情况下重新加载已更改的Python模块。

若干注意事项:
1. 如果模块在语法上是正确的,但在初始化过程中失败,则导入过程不能正确地将模块的名字绑定到符号表中。这时,必须在模块能被重新加载之前使用import()函数加载该模块。
2. 重新加载的模块不删除最初旧版本模块在符号表中的登记项。
3. 如果一模块利用from。。。import。。。方式从另一模块导入对象,reload()函数不重新定义导入的对象,可利用import。。。形式避免这个问题。

4. 提供类的重新加载模块不影响所提供类的任何已存实例---已存实例将继续使用原来的方法定义,只有该类的新实例使用新格式。这个原则对派生类同样适用。


在python中,每一个以 .py结尾的Python文件都是一个模块。其他的文件可以通过导入一个模块来读取该模块的内容。导入从本质上来讲,就是载入另一个文件,并能够读取那个文件的内容。一个模块的内容通过这样的属性能够被外部世界使用。

  这种基于模块的方式使模块变成了Python程序架构的一个核心概念。更大的程序往往以多个模块文件的形式出现,并且导入了其他模块文件的工具。其中的一个模块文件被设计成主文件,或叫做顶层文件(就是那个启动后能够运行整个程序的文件)。

  默认情况下,模块在第一次被导入之后,其他的导入都不再有效。如果此时在另一个窗口中改变并保存了模块的源代码文件,也无法更新该模块。这样设计的原因在于,导入是一个开销很大的操作(导入必须找到文件,将其编译成字节码,并且运行代码),以至于每个文件、每个程序运行不能够重复多于一次。

  那么想要使得Python在同一次会话中再次运行文件,该怎么办呢?这就需要调用imp标准库模块中的reload函数。如下所示

 

1
from  imp import reload reload(MyModule)

  

  这样就可以重新装载MyModule模块,使得修改有效。

  注意:reload函数希望获得的参数是一个已经加载了的模块对象的名称,所以如果在重载之前,请确保已经成功地导入了这个模块。

  说明:Python 3.0把reload内置函数移到了imp标准库模块中。它仍然像以前一样重载文件,但是,必须导入它才能使用。在Python 3.0中,运行import imp并使用imp.reload(M),或者像上面所示的,运行from imp import并使用reload(M)

机器学习实战P22页

>>>reload(KNN)改为

Python 3.5.2中

>>>import importlib

>>>importlib.reload(KNN)

在python2中,reload()是内置函数,能够直接使用。

但是在python3中,直接使用reload()会报错,需要从imp中导入。

用法为

[html]  view plain  copy  print ?
  1. >>>from imp import reload  
  2. >>>reload(xyz)  


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 的reload()方法 的相关文章

随机推荐

  • Apollo配置自动更新机制及拓展

    Apollo配置自动更新机制及拓展 一 背景 在日常工作中 我们代码里经常会用到以下两种方式读取Apollo配置 1 使用 Value注解 在使用配置的bean里面定义带 Value的属性 将Apollo配置读取到基础类型对象 Value
  • pytorch学习-刘二大人第一遍

    学习链接 https www bilibili com video BV1Y7411d7Ys spm id from 333 999 0 0 一 线性模型 1 数据集分为 训练集和测试集 2 过拟合 训练的时候非常好 测试的时候差强人意 泛
  • Jenkins自定义构建参数使用

    Jenkins自定义构建参数使用 配置参数化构建 新建参数 简单的在命令使用 直接使用字符参数即可 配置名称和默认值 命令中引用 mvn compile jib build Dimage tag pa 1 5 0 BUILD TAG Dre
  • Hyperledger Fabric Java SDK最新教程

    Fabric Java SDK是Fabric区块链官方提供的用于Java应用开发的SDK 全称为Fabric sdk java 网上可用资料不多 本文列出了精心整理的针对Fabric Java SDK的最新精选教程 如果希望快速掌握Fabr
  • 【Python 1-4】Python教程之——什么是变量

    变量来源于 数学 是计算机语言中能储存计算结果或能表示值的抽象概念 文章首发地址 运行hello world py时发生了什么 运行hello world py时 Python都做了些什么呢 下面来深入研究一下 实际上 即便是运行简单的程序
  • 段错误(核心已转储)问题的分析方法

    问题现象 今天在研究linux kernel中typedef的用法时 写了一个程序test typedef c 内容如下 include
  • 什么是线路规程?

    今天在看串口驱动的时候遇到了一个概念线路规程 以前只知道规则 程序之类的这个概念还是头次听说 既然碰上了就好好研究一番 百度百科给出了定义 规程 简单说就是 规则 流程 所谓流程即为实现特定目标而采取的一系列前后相继的行动组合 也即多个活动
  • linux 使用Vi/Vim加密和解密文件

    在linux下使用vi vim可以很方便的对文件进行加密和解密的操作 加密 1 进到编辑模式 输入完内容后按ESC 然后输入 X 注意是大写的X 回车 X 2 这时系统提示让你输入密码 2次 3 保存退出 2 取消密码 1 通过vi打开文件
  • Python使用SQLAlchemy

    Python使用SQLAlchemy 1 安装SQLAlchemy 备注 本文适用于SQLAlchemy gt 2 0 安装SQLAlchemy pip install SQLAlchemy 安装pymysql pip install py
  • SciPy 用户指南

    1 介绍 1 1 SciPy Organization SciPy 被组织成涵盖不同科学计算领域的子包 这些总结在下表中 分包 描述 cluster 聚类算法 constants 物理和数学常数 fft 快速傅里叶变换 integrate
  • c++之模板

    目录 一 函数模板 1 函数模板的格式 2 函数模板用法举例 二 类模板 1 类模板的格式 2 类模板用法举例 在C 中涉及了一个新知识 模板 关于模板 它是代码复用的手段 是泛型编程的基础 这里会介绍函数模板和类模板两种 一 函数模板 函
  • Python matplotlib 画图窗口显示到gui或者控制台的方法

    我们再用Jupyter notebook ipython console qtconsole的时候 有的时候画图希望不弹出窗口 直接画在console里 又得时候有希望弹出窗口 因为console里太小了 那么我们可以用下面的命令 matp
  • Python画樱花树的代码

    不废话 直接上代码 import turtle import random def draw sakura branch len if branch len gt 3 if 8 lt branch len lt 12 if random r
  • 【概率论】离散型随机变量分布——伯努利分布、泊松分布

    先简单复习下之前的内容 离散型随机变量指的是随机变量X的取值是有限的 或无穷可列的 详细的解释可以参照这篇博文 https blog csdn net dengfangmei1216 article details 107526615 随机
  • CSDN-markdown编辑器使用

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 用它写博客 将会带来全新的体验哦 Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列
  • 微信二次分享解决方案

    最近项目中开发需要在微信端二次分享分享H5页面 但是第一次分享的时候安卓没有问题 ios有时成功有时失败 并且二次分享的时候安卓还是没有问题 ios一次成功都没有 后来查阅文档搜索资料终于解决了 一下是解决资料内容 百度上自定义微信分享标题
  • Nmap网络扫描

    目录 预备知识 TCP与UDP 扫描的分类 nmap简介 实验目的 实验环境 实验步骤一 任务描述 安装Nmap 实验步骤二 任务描述 Zenmap基本应用 实验步骤三 任务三 nmap命令行的使用 预备知识 TCP与UDP TCP是一种面
  • SpringBoot+MyBits 调用mybatis-config.xml的方法

    SpringBoot MyBits 调用mybatis config xml的方法 在application properties中如做下调用 Mybatis mybatis config location classpath mybati
  • 已解决:Java环境变量配置后不生效

    一 问题 从jdk8升级到jdk11 配置JAVA HOME后 不生效 备注 jdk8是安装版 jdk11是解压版 二 解决办法 在环境变量Path中 删除下面的配置 C Program Files x86 Common Files Ora
  • Python 的reload()方法

    reload 函数将以前导入过的模块再加载一次 重新加载 reload 包括最初导入模块时应用的分析过程和初始化过程 这样就允许在不退出解释器的情况下重新加载已更改的Python模块 若干注意事项 1 如果模块在语法上是正确的 但在初始化过