简述

在进行模块化编程时,经常会遇到这样一种场景:

编写了一个 Python 模块,并用 import my_module 的形式进行导入。当对该模块进行更改后,即使重新导入,其中的任何改变都不会被识别,这使得模块调试变得非常困难。

那么,该如何解决这个问题?

| 版权声明:一去、二三里,未经博主允许不得转载。

模块仅被导入一次

出于效率原因(导入必须找到文件,将其编译成字节码,并且运行代码),Python shell 在每次会话中,只对每个模块导入一次。

例如,有一个名为 hello.py 的模块,包含以下代码:

print('Hello, Python!')

如果多次导入,会出现什么效果?

>>> import hello
Hello, Python!
>>>
>>> import hello
>>> import hello

可以看到,代码只执行了一次。也就是说,模块仅被导入了一次。

重新加载模块

倘若,更改了已经在 Python shell 中导入的模块,然后重新导入该模块,Python 会认为“我已经导入了该模块,不需要再次读取该文件”,所以更改将无效。

要解决这个问题,有以下几种方式:

  1. 最简单、最有效的方法:重新启动 Python shell。但是,这也有缺点,特别是丢失了 Python shell 名称空间中存在的数据以及其他导入模块中的数据。
  2. 对于简单的情况,可以使用 Python 的 reload() 函数。在许多情况下,在编辑一个模块之后就足够了。
  3. 对于更复杂的情况,重新加载被编辑的模块也需要重新加载其依赖/导入的模块(因为它们必须作为被编辑模块初始化的一部分进行初始化),所以 IPython 的 autoreload 扩展很有用。

PS: 下面主要介绍第 2 种方式 - reload(),其他方式自行尝试。

reload() 是 Python 提供的一种简洁的方式,在不同的 Python 版本中有不同的表现形式:

  • 在 Python 2.x 中,reload() 是内置函数。
  • 在 Python 3.0 - 3.3 中,可以使用 imp.reload(module)。
  • 在 Python 3.4 中,imp 已经被废弃,取而代之的是 importlib。
>>> import importlib
>>> import hello
Hello, Python!  # 修改前的内容
>>>
>>> importlib.reload(hello)
I am coming...  # 修改后的内容
<module 'hello' from '/home/wang/Projects/hello.py'>

Python 重新加载模块相关推荐

  1. python重新加载模块_jupyter实现重新加载模块

    最近几年,jupyter在全球数据科学领域,已经成为不可或缺的重要工具. 在jupyter中用python写程序,若import了自己写的外部模块,如果这个外部模块有更新,再次执行import,jup ...

  2. python动态加载模块有什么用_人生苦短我用python(02)动态加载模块

    继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一致好评,经常问小普第二期什么时候出呀?好期待~ 来来来小普这就呈上第二期[02动态加载模块] 错过了第一期的小伙伴们可以点此穿越哦 ...

  3. python重新加载文件_Python的重新加载知识点总结

    简述Python的重新加载 为防止两个模块互相导入的问题,Python默认所有的模块都只导入一次,如果需要重新导入模块, Python2.7可以直接用reload(),Python3可以用下面几种方法 ...

  4. go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 文章来源:公众号"睿江云计算" 继第一期[人生苦短我用Python系列专栏]发布后,深受广大睿普迷的一 ...

  5. python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...

    根据我使用的 Python安装,我在加载模块时遇到了一些问题.当我输入 from quantecon import approx_markov 在使用Python 3.4.0的终端中,返回以下错误消息 ...

  6. python自带的对称算法_一种基于对称算法和专用加载模块的Python程序模块加密方法...

    一种基于对称算法和专用加载模块的Python程序模块加密方法 [专利说明]一种基于对称算法和专用加载模块的Python程序模块加密方法 技术领域 [0001]本发明涉及一种网络安全技术,具体涉及一种P ...

  7. python为什么import不了_python – 为什么PyImport_Import无法从当前目录加载模块?

    我正在尝试运行embedding example并且我无法从当前工作目录加载模块,除非我将其显式添加到sys.path然后它可以工作: PyRun_SimpleString("import ...

  8. python3 重新运行本程序_python-3.x – 在py.test测试中重新启动python(或重新加载模块)...

    要重新加载模块,请尝试使用库imp中的reload() 例: from imp import reload import some_lib #do something reload(some_lib) ...

  9. [转载] 在IPython中重新加载模块 importlib

    参考链接: 在Python中重新加载模块 起因: 我们在学习 python 的时候,经常性的会用到 Ipython,进行函数的测试,但是我们会经常性的遇到调试函数,反复的修改函数,所以需要重新载入函数 ...

最新文章

  1. servlet程序HTTP Status 500 - Error instantiating servlet class 解决
  2. iphone录屏怎么录声音_ev录屏怎么录制声音 ev录屏声音设置教程
  3. QT实现动态的wave水波纹
  4. 云计算环境下的应用架构设计
  5. 【渝粤教育】国家开放大学2018年春季 7392-22FMatlab语言及其应用 参考试题
  6. php mysql 绕过_PHP中md5绕过
  7. WPF圆角按钮与触发颜色变化
  8. JVM 运行时数据区域总结
  9. 数据类型总结(干货)
  10. 音乐 美术 计算机期末考试表,2021东莞中考音乐美术信息技术合格性考试时间安排...
  11. CVS文件的常见操作
  12. 机器学习资料合计(一)
  13. Java中的==符号与equals()的使用(测试两个变量是否相等)
  14. 图书管理系统需求分析
  15. linux连接Redis客户端
  16. VMware vSphere Esxi官网下载页面链接
  17. 封禁恶意IP访问在我司实践总结
  18. oppo手机删除计算机怎样恢复,▷提示|如何将OPPO手机恢复为出厂设置
  19. u盘插电脑计算机卡了,电脑插入U盘就卡顿?3个原因你需要了解一下
  20. MySQL 两张表关联更新(用一个表的数据更新另一个表的数据)两个表使用条件从另外一个表获取数据更新本表

热门文章

  1. 【Pycharm】主题背景颜色更改
  2. 不是家电品牌!不是家装品牌!不是家居品牌!三翼鸟是啥?
  3. HDFS启动报错Expected to be able to read up until at least txid but unable to find any edit logs
  4. 对北京大学红旗在线的一次友情检测
  5. 基于geoserver的伪三维地图制作
  6. 地图制图领域使用计算机优点在于哪些方面,电子地图制图的运用与发展
  7. 已拦截跨源请求:同源策略禁止读取位于 http:**** 的远程资源。(原因:CORS 头缺少 ‘Access-Control-A
  8. ListView--QQ联系人样式
  9. 化妆品行业如何开启新零售模式?你懂了吗
  10. python精通能赚钱吗_月入3千到月入10万,精通数据分析的人到底有多赚?