重新加载模块

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

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

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

PS:

下面主要介绍第 2 种方式 - reload(),其他方式自行尝试。
reload()是 Python 提供的一种简洁的方式,在不同的 Python 版本中有不同的表现形式:

>>> import importlib
>>> import hello
Hello, Python! # 修改前的内容
>>>
>>> importlib.reload(hello)
I am coming... # 修改后的内容
<module 'hello' from '/home/wang/Projects/hello.py'>

另外的参考

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

方法一:基本方法
from imp import reload
reload(module)

方法二:按照套路,可以这样
import imp
imp.reload(module)

方法三:看看imp.py,有发现,所以还可以这样
import importlib
importlib.reload(module)

方法四:根据天理,当然也可以这样
from importlib import reload
reload(module)

参考原文:https://www.jianshu.com/p/02c24557e91e

在python中重新导入模块的更多相关文章

  1. 解决Python中PyCharm导入模块时,模块名下出现红色波浪线的问题

    在博主第一次在PyCharm中导入模块时,模块名下出现红色波浪线,不影响程序执行,但强迫症忍不了 以下是解决办法 Let's do it ... 进入设置,找到Console下的Python Cons ...

  2. python中动态导入模块

    当导入的模块不存在时,就会报ImportError错误,为了避免这种错误可以备选其他的模块或者希望优先使用某个模块或包,可以使用try...except...导入模块或包的方式. 例如: Python ...

  3. Python import语句导入模块语法[转]

    Python import语句导入模块语法 社区推荐:掘金是国内最活跃的技术社区,我们每日有优质Python开发实例分享,海量python开源库推送.来掘金,和更多懂技术的小伙伴交流.   pytho ...

  4. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  5. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  6. Python中的random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  7. 浅析Python中的struct模块

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  8. python中的StringIO模块

    python中的StringIO模块 标签:python StringIO 此模块主要用于在内存缓冲区中读写数据.模块是用类编写的,只有一个StringIO类,所以它的可用方法都在类中.此类中的大部分 ...

  9. python中的select模块

    介绍: Python中的select模块专注于I/O多路复用,提供了select  poll  epoll三个方法(其中后两个在Linux中可用,windows仅支持select),另外也提供了kqu ...

随机推荐

  1. beansbinding NetBeans IDE 中 Swing数据绑定插件

    http://my.oschina.net/u/127459/blog/111486 https://kenai.com/projects/betterbeansbinding/pages/Home ...

  2. 关于Unity中从服务器下载资源压缩包AssetBundle的步骤

    AssetBundle 1: 在Unity中,能为用户存储资源的一种压缩格式的打包集合,他可以存任意一种Unity引擎可以识别的资源: 模型,音频,纹理图,动画, 开发者自定义的二进制文件; 2: 这 ...

  3. Mac和Linux下pip更换源

    cd ~mkdir .pip vim .pip/pip.conf 在pip.conf中写入 [global]timeout = 6000index-url = https://pypi.tuna.ts ...

  4. ubuntu运行命令tee显示和保存为log

    一般有三种需求: 假如我要执行一个py文件 python class.py 1:将命令输出结果保存到文件log.log python class.py |tee log.log 结果就是:屏幕输出和直 ...

  5. 初试PyOpenGL四 (Python+OpenGL)GPU粒子系统与基本碰撞

    这篇相当于是对前三篇的总结,基本效果如下: 在初试PyOpenGL一 (Python+OpenGL)讲解Pyopengl环境搭建,网格,球体,第一与第三人称摄像机的实现.在初试PyOpenGL二 (P ...

  6. c 变量的存储类型auto等(基础知识)和c函数变量

    总结 1).在c语言中每一个变量和函数有两个属性:数据类型和数据的存储类别. 2). 对数据型(如整型.字符型等).存储类别指的是数据在内存中存储的方式. 存储方式分为两大类: 静态存储类和动态存储类 ...

  7. (原)linux下利用cmake来编译jthread开源库

    其实上次在用hisi3531平台的时候,就已经编译过一次这个库了,这次换了平台环境,交叉编译器变成了arm-hisiv100-linux-工具链,所以,没办法只能重新来过. 因为之前编译过,所以这次还 ...

  8. POJ 3126 --Father Christmas flymouse【scc缩点构图 &amp;&amp; SPFA求最长路】

    Father Christmas flymouse Time Limit: 1000MS   Memory Limit: 131072K Total Submissions: 3007   Accep ...

  9. c# mvc 获取 HtmlHelper 表达式值和时间格式化 去边框

    /// <summary> /// 返回没有边框的只读的TextBox标签 /// </summary> /// <typeparam name="TModel ...

  10. 消息中间件activemq-5.13.0整合spring

    首先说明这里是在qctivemq配置好并启动服务的情况下进行,请先自行配置好.也可关注我的博文(消息中间件qctivemq安全验证配置)进行配置. 1.首先看一下项目结构 2.所需jar包,这里只列出 ...