我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

  1. $ tree foo 
  2. foo 
  3. └── bar.py 
  4.  
  5. 0 directories, 1 file 

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

  1. print("successful to be imported") 

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

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 

重载模块方法一

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> reload(bar) 
  6. successful to be imported 
  7. <module 'foo.bar' from 'foo/bar.pyc'> 

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

重载模块方法二

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

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> import imp 
  6. >>> imp.reload(bar) 
  7. successful to be imported 
  8. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 

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

  1. <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 方法

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> import importlib 
  6. >>> importlib.reload(bar) 
  7. successful to be imported 
  8. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 

重载模块方法四如果你对包的加载器有所了解,还可以使用下面的方法

  1. >>> from foo import bar 
  2. successful to be imported 
  3. >>> from foo import bar 
  4. >>> 
  5. >>> bar.__spec__.loader.load_module() 
  6. successful to be imported 
  7. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 

重载模块方法五

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

  1. >>> import foo.bar 
  2. successful to be imported 
  3. >>> 
  4. >>> import foo.bar 
  5. >>> 
  6. >>> import sys 
  7. >>> sys.modules['foo.bar'] 
  8. <module 'foo.bar' from '/Users/MING/Code/Python/foo/bar.py'> 
  9. >>> del sys.modules['foo.bar'] 
  10. >>> 
  11. >>> import foo.bar 
  12. successful to be imported 

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

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

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

  1. >>> import foo.bar 
  2. successful to be imported 
  3. >>> 
  4. >>> import foo.bar 
  5. >>> 
  6. >>> import sys 
  7. >>> del sys.modules['foo.bar'] 
  8. >>> from foo import bar 
  9. >>> 

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

Python 炫技操作:五种 Python 转义表示法

这篇文章在昨天的头条其实已经发过,但是由于是挺早之前仓促而写的,发之前也没有好好的检查内容,导致有一些内容有一些问题,这也很正常,谁写的代码没有点 bug,文章也是类似。

Python 炫技操作:安装包的八种方法

easy_install 这应该是最古老的包安装方式了,目前基本没有人使用了。下面是 easy_install 的一些安装示例

Python炫技操作:执行函数的九种方法

以下就是我总结的函数执行的十种方法,很多方法,大家也都知道,但是也有几个方法,几乎是见不到的,尤其是后面使用 operator 库的那两种方法。

python中有哪些模块重载的方法

本篇文章为大家展示了python中有哪些模块重载的方法,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pil
2023-06-14

Python的MongoDB模块PyMongo操作方法集锦

开始之前当然要导入模块啦:>>> import pymongo下一步,必须本地mongodb服务器的安装和启动已经完成,才能继续下去。 建立于MongoClient 的连接:client = MongoClient('localhost',
2022-06-04

Python使用yaml模块操作YAML文档的方法

YAML是可读性高,用来表达数据序列化格式的,专用于写配置文件的语言,这篇文章主要介绍了Python使用yaml模块操作YAML文档,需要的朋友可以参考下
2023-01-13

Python中mmap模块处理大文本的操作方法

这篇文章主要介绍了Python中mmap模块(处理大文本),将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存映射读写取代I/O缓存读写,以获得较高的性能,需要的朋友可以参考下
2023-02-07

Python中的os.path路径模块中的操作方法总结

解析路径 路径解析依赖与os中定义的一些变量:os.sep-路径各部分之间的分隔符。os.extsep-文件名与文件扩展名之间的分隔符。os.pardir-路径中表示目录树上一级的部分。os.curdir-路径中当前目录的部分。split(
2022-06-04

Python使用Cv2模块识别验证码的操作方法

这篇文章主要介绍了Python使用Cv2模块识别验证码,使用Cv2模块、pytesseract模块进行操作,pytesseract模块将智能识别图片字体数字,用于打印出来,本文通过代码案例给大家详细讲解,需要的朋友可以参考下
2023-01-03

Python工具脚本调用外层模块的操作方法

本文详细讲解了Python工具脚本调用外层模块的操作方法。通过导入语句,可以导入math等外部模块,并使用模块中的函数、类和变量。导入外部模块的方法包括直接导入和指定别名导入。另外,文章还介绍了导入本地模块、避免循环导入、处理导入错误和动态导入模块等高级技巧。最后以计算圆面积的示例演示了如何使用math模块。
Python工具脚本调用外层模块的操作方法
2024-04-02

重新启动Windows 10和Windows 11的五种方法,简单易操作,维护电脑必备技巧

无论你的PC是否因应用程序过多而陷入困境,或者你刚刚安装了需要重新启动的新软件,快速重新启动Windows都可以解决许多Windows错误。

Python中的复制操作及copy模块中的浅拷贝与深拷贝方法

程序中常常需要复制一个对象, 按思路应该是这样的a = [1, 2, 3] b = a# [1, 2, 3] print b 已经复制好了,但是现在得改变一下第一个元素的值把它改成5b[0] = 5 # [5, 2, 3] print b
2022-06-04

Python对文件和目录进行操作的方法(file对象/os/os.path/shutil 模块)

使用Python过程中,经常需要对文件和目录进行操作。所有file类/os/os.path/shutil模块时每个Python程序员必须学习的。 下面通过两段code来对其进行学习。 1. 学习 file对象 2. 学习os/os.path
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录