当前位置: 首页 > 编程日记 > 正文

Python炫技操作:模块重载的五种方法

作者 | 写代码的明哥

来源 | Python编程时光


环境准备

新建一个 foo 文件夹,其下包含一个 bar.py 文件

$ tree foofoo└── bar.py
0 directories, 1 file

bar.py 的内容非常简单,只写了个 print 语句

print("successful to be imported")

只要 bar.py 被导入一次,就被执行一次 print


禁止重复导入

由于有 sys.modules 的存在,当你导入一个已导入的模块时,实际上是没有效果的。

>>> from foo import barsuccessful to be imported>>> from foo import bar>>>


重载模块方法一

如果你使用的 python2(记得前面在 foo 文件夹下加一个 __init__.py),有一个 reload 的方法可以直接使用

>>> from foo import barsuccessful to be imported>>> from foo import bar>>>>>> reload(bar)successful to be imported<module 'foo.bar' from 'foo/bar.pyc'>

如果你使用的 python3 那方法就多了,详细请看下面。


重载模块方法二

如果你使用 Python3.0 -> 3.3,那么可以使用 imp.reload 方法

>>> from foo import barsuccessful to be imported>>> from foo import bar>>>>>> import imp>>> imp.reload(bar)successful to be imported<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>

但是这个方法在 Python 3.4+,就不推荐使用了

<stdin>:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

重载模块方法三

如果你使用的 Python 3.4+,请使用 importlib.reload 方法

>>> from foo import barsuccessful to be imported>>> from foo import bar>>>>>> import importlib>>> importlib.reload(bar)successful to be imported<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>


重载模块方法四

如果你对包的加载器有所了解(详细可以翻阅我以前写的文章:https://iswbm.com/84.html)

还可以使用下面的方法

>>> from foo import barsuccessful to be imported>>> from foo import bar>>>>>> bar.__spec__.loader.load_module()successful to be imported<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>


重载模块方法五

既然影响我们重复导入的是 sys.modules,那我们只要将已导入的包从其中移除是不是就好了呢?

>>> import foo.barsuccessful to be imported>>>>>> import foo.bar>>>>>> import sys>>> sys.modules['foo.bar']<module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'>>>> del sys.modules['foo.bar']>>>>>> import foo.barsuccessful to be imported

有没有发现在前面的例子里我使用的都是 from foo import bar,在这个例子里,却使用 import foo.bar,这是为什么呢?

这是因为如果你使用 from foo import bar 这种方式,想使用移除 sys.modules 来重载模块这种方法是失效的。

这应该算是一个小坑,不知道的人,会掉入坑中爬不出来。

>>> import foo.bar
successful to be imported
>>>
>>> import foo.bar
>>>
>>> import sys
>>> del sys.modules['foo.bar']
>>> from foo import bar
>>>

更多精彩推荐
  • 四款5G版iPhone 12齐发,苹果股价却应声而跌

  • AI 还原康乾盛世三代皇帝的样貌,简直太太太好玩了

  • 图神经网络快速爆发,最新进展都在这里了

  • 官宣!1024 程序员节日程发布,第一代程序员求伯君将出席大会

  • 如何应对云原生之旅中的安全挑战?

相关文章:

使用Powershell管理Linux 下的 SQL Server

使用Powershell管理Linux 下的 SQL Server我们上一篇文章介绍了在Centos 7.3下安装及配置 SQL Server&#xff0c;今天我们主要介绍的是如何在Windows下使用Powershell来管理Linux下的SQL Server&#xff0c;其实说到Powershell大家都已经很熟悉了&#xff0c;Powershell不止是…

这么多年,终于有人讲清楚Transformer了

作者 | Jay Alammar译者 | 香槟超新星&#xff0c;责编 | 夕颜来源 | CSDN&#xff08;ID:CSDNnews&#xff09;注意力机制是一种在现代深度学习模型中无处不在的方法&#xff0c;它有助于提高神经机器翻译应用程序性能的概念。在本文中&#xff0c;我们将介绍Transformer这种模…

提高IIS网站服务器的效率的八种方法 (转载)

作者&#xff1a;未知 请作者速与本人联系以下是提高IIS 5.0网站服务器的执行效率的八种方法&#xff1a; 1. 启用HTTP的持续作用可以改善15~20%的执行效率。 2. 不启用记录可以改善5~8%的执行效率。 3. 使用 [独立] 的处理程序会损失20%的执行效率。 4. 增加快取记忆体的保存…

搭建Docker私有仓库--自签名方式

为了能集中管理我们创建好的镜像&#xff0c;方便部署服务&#xff0c;我们会创建私有的Docker仓库。通读了一遍官方文档&#xff0c;Docker为了确保安全使用TLS,需要CA认证&#xff0c;认证时间长的要钱啊&#xff0c;免费过期时间太短&#xff0c;还是用自签名比较简单。 准备…

Visual C# .NET 2003 语言的改变

Visual C# .NET 2003 语言的改变 Prashant Sridharan Microsoft Corporation 2002年12月30日 适用于&#xff1a; Microsoft Visual Studio C# 2003 摘要&#xff1a;为了与欧洲计算机制造商协会 (ECMA) 的 C# 规范完全兼容&#xff0c;Microsoft Corporation 对 C# 编译器的…

.net内存管理与指针

本人前段时间准备做个TIN三角网的程序&#xff0c;思想是是分割合并法&#xff0c;分割的同时建立平衡二叉树&#xff0c;然后子树建三角网并相互合并&#xff0c;再向上加入父亲的点集。由于我对.net语言熟点&#xff0c;就准备用c#语言实现。但是不知从那听过当建立的类型只想…

强化学习是针对优化数据的监督学习?

作者 | Ben Eysenbach、Aviral Kumar、Abhishek Gupta 编译 | 凯隐出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;强化学习&#xff08;RL&#xff09;可以从两个不同的视角来看待&#xff1a;优化和动态规划。其中&#xff0c;诸如REINFORCE等通过计算不可微目标期…

solrcloud Read and Write Side Fault Tolerance

2019独角兽企业重金招聘Python工程师标准>>> SolrCloud supports elasticity, high availability, and fault tolerance in reads and writes. What this means, basically, is that when you have a large cluster, you can always make requests to the cluster: …

XML的二十个热点问题

http://www.netqu.com 中华技术网会员 Wuxuehui 发布翻译&#xff1a;Chen Zhihong 编辑&#xff1a;孙一中这些日子,几乎每个人都在谈论XML (Extensible Markup Language)&#xff0c;但是很少有人真正理解其含义。XML的推崇者认为它能够解决所有HTML不能解决的问题&#xff0…

5G+云网融合,移动云带领开发者释放边缘计算的力量

在5G浪潮的驱动下&#xff0c;智能设备、自动驾驶、VR/AR等对于实时性、本地性有着较强需求的场景日益丰富&#xff0c;边缘计算应运而生&#xff0c;有效提升了用户体验。众所周知&#xff0c;边缘计算技术的突破&#xff0c;意味着许多控制将通过本地设备实现而无需交由云端&…

Linux下模拟RAID5实现磁盘损坏,数据自动切换到备份磁盘上

另一个博客地址&#xff1a;www.rsyslog.org Linux社区 RAID5磁盘配额&#xff0c; 1块磁盘&#xff0c;分5个分区模拟5块磁盘&#xff0c;其中4个做成RAID5分区&#xff0c;剩余一个作为冗余磁盘&#xff0c;挂载到/data1目录&#xff0c;模拟其中一块磁盘损坏&#xff0c;冗…

jsp9大内置对象

转载于:https://www.cnblogs.com/xtdxs/p/6523059.html

RHCSA 解析-01

这是RHCSA题目开始正式做题前的准备部分。 后面会陆续连载部分类似的题型极其解法。 考试时间&#xff1a;RHCSA 2.5小时 总分300分&#xff0c;210分pass考试环境&#xff1a;考试为上机考试&#xff0c;在一台真实机系统中&#xff0c;已经预安装好虚拟机&#xff0c;要求所…

关于Visual C#装箱与拆箱的研究

关于Visual C#装箱与拆箱的研究2004-09-15 作者&#xff1a; 出处&#xff1a; CSDN在对这个问题展开讨论之前&#xff0c;我们不妨先来问这么几个问题&#xff0c;以系统的了解我们今天要探究的主题。观者也许曾无数次的使用过诸如System.Console类或.NET类库中那些品种繁多的…

Imagination推出全新多核GPU IP系列:提供33种不同配置,AI算力达24 TOPS

近日&#xff0c;致力于打造半导体和软件知识产权&#xff08;IP&#xff09; Imagination Technologies宣布推出全新的IMG B系列&#xff08;IMG B-Series&#xff09;图形处理器&#xff08;GPU&#xff09;&#xff0c;进一步扩展了其GPU知识产权&#xff08;IP&#xff09;…

ES6: 字符串

现在ES6增加了很多的字符串的方法&#xff0c;但是有些感觉自己也不是很懂&#xff0c;所以就罗列了一些平常的用的。 includes&#xff0c; startsWith&#xff0c; endsWith includes(): 返回布尔值&#xff0c;表示是否找到了参数字符串&#xff1b;startsWith(): 返回布尔值…

警惕!新版Net Transport(影音传送带)安装有猫腻

http://article.pcpop.com/show.aspx?topic_id1317935由于早些时候FlashGet和NetAnts&#xff08;网络蚂蚁&#xff09;迟迟没有新版本发布&#xff0c;Net Transport&#xff08;影音传送带&#xff09;趁虚而入&#xff0c;以免费且支持流媒体下载迅速获得了网民的青睐。不过…

我是一个平平无奇的AI神经元

来源 | 编程技术宇宙责编 | 晋兆雨头图 | CSDN付费下载自视觉中国我是一个AI神经元我是一个AI神经元&#xff0c;刚刚来到这个世界上&#xff0c;一切对我来说都特别新奇。之所以叫这个名字&#xff0c;是因为我的工作有点像人类身体中的神经元。人体中的神经元可以传递生物信号…

mysql的越过用户权限表登录

mysql的越过用户权限表登录昨天突然有个朋友对了说&#xff0c;不小心把mysql数据库的mysql库的user表给误删了&#xff0c;让我帮帮他。当是我就想到了越过用户权限表启动服务的选项skip-grant-table.自己也实验了一把&#xff0c;以前只知道有这样的方法&#xff0c;但一直没…

互联网引发全面深刻产业变革

2019独角兽企业重金招聘Python工程师标准>>> 当前&#xff0c;互联网已经渗透到社会生产生活各个方面&#xff0c;深刻改变着人类社会运行方式&#xff0c;加速着人类文明进步的步伐&#xff0c;开启了一个崭新的时代。互联网革命是人类发展史上历次科技革命的发展和…

apache模块

核心功能和多路处理模块 core Apache HTTP服务器核心提供的功能&#xff0c;始终有效。 mpm_common 收集了被多个多路处理模块(MPM)实现的公共指令。 beos 专门针对BeOS优化过的多路处理模块(MPM) event 一个标准workerMPM的实验性变种。 mpm_netware Novell NetWare优化过的线…

如何实现iframe(嵌入式帧)的自适应高度

好几次看到有人提问问到如何实现 iframe 的自适应高度&#xff0c;能够随着页面的长度自动的适应以免除页面和 iframe 同时出现滚动条的现象&#xff0c;刚好我在工作中也碰到了类似问题&#xff0c;于是上网翻查&#xff0c;东抄抄西看看&#xff0c;弄出来这么一个函数&#…

拖拉机也将自动驾驶,日本劳动力短缺大力发展无人农业

来源 | HyperAI超神经责编 | 晋兆雨头图 | CSDN付费下载自视觉中国内容提要&#xff1a;为解决农业劳动力短缺问题&#xff0c;日本近年来涌现出自动收割机、插秧机等自动化农业设备。近日&#xff0c;其农机生产商久保田&#xff0c;也宣布与英伟达联手&#xff0c;将推出自动…

php字符串操作

1.字符串的格式化 按照从表单提交数据之后&#xff0c;php处理的不同&#xff1a;接受&#xff0c;显示&#xff0c;存储。也有三种类型的格式化方法。 1.1字符串的接收之后的整理: trim(),ltrim(),rtrim() 当数据从表单中上传上来的时候需要对字符串整理一下&#xff0c;去掉字…

javascript事件列表解说

javascript事件列表解说事件浏览器支持解说一般事件onclickIE3、N2 鼠标点击时触发此事件ondblclickIE4、N4 鼠标双击时触发此事件onmousedownIE4、N4 按下鼠标时触发此事件onmouseupIE4、N4 鼠标按下后松开鼠标时触发此事件onmouseoverIE3、N2 当鼠标移动到某对象范围的上方时…

Facebook如何预测广告点击:剖析经典论文GBDT+LR

作者 | 梁唐来源 | TechFlow今天我们来剖析一篇经典的论文&#xff1a;Practial Lessons from Predicting Clicks on Ads at Facebook。从这篇paper的名称当中我们可以看得出来&#xff0c;这篇paper的作者是Facebook的广告团队。这是一篇将GBDT与LR模型结合应用在广告点击率预…

centos lustre 简单 安装教程

Lustre是一个大规模的、安全可靠的&#xff0c;具备高可用性的集群文件系统&#xff0c;它是由SUN公司开发和维护的。 该项目主要的目的就是开发下一代的集群文件系统&#xff0c;可以支持超过10000个节点&#xff0c;数以PB的数据量存储系统。 因为业务需要&#xff0c;需要做…

安装flash

网校客服124说: 2017-03-11 18:37:39网校客服124说: 2017-03-11 18:37:48您好&#xff0c;您可以安装这个插件试一下http://www.chinaacc.com/downcenter/网校客服124说: 2017-03-11 18:38:04下载后安装时请关闭所有的浏览器。我说: 2017-03-11 18:40:08转载于:https://blo…

左右漂浮的广告代码

引用JS文件的代码&#xff1a; <script language"javascript" src"****.js"></script> <---- var delta0.15 var collection; function floaters() { this.items []; this.addItem function(id,x,y,content) { document.wri…

韩辉:国产操作系统的最大难题在于解决“生产关系”

作者 | 高卫华编辑 | Just出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;操作系统是所有软件体系的基础&#xff0c;而随着中国物联网产业的迅猛发展&#xff0c;诸多国产嵌入式操作系统开始跃出水面。其中之一包括 SylixOS&#xff0c;这是一款由国内企…