千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:重庆千锋IT培训  >  技术干货  >  Python 之模块重载的五种方法

Python 之模块重载的五种方法

来源:千锋教育
发布人:xqq
时间: 2023-11-12 10:41:25

python环境准备

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

$treefoo

foo

└──bar.py

0directories,1file

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

print("successfultobeimported")

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

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

>>>fromfooimportbar

successfultobeimported

>>>fromfooimportbar

>>>

重载模块方法一

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

>>>fromfooimportbar

successfultobeimported

>>>fromfooimportbar

>>>

>>>reload(bar)

successfultobeimported

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

重载模块方法二

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

>>>fromfooimportbar

successfultobeimported

>>>fromfooimportbar

>>>

>>>importimp

>>>imp.reload(bar)

successfultobeimported

但是这个方法在Python3.4+,就不推荐使用了。

:1:DeprecationWarning:theimpmoduleisdeprecatedinfavourofimportlib;seethemodule'sdocumentationforalternativeuses

重载模块方法三

如果你使用的Python3.4+,请使用importlib.reload方法:

>>>fromfooimportbar

successfultobeimported

>>>fromfooimportbar

>>>

>>>importimportlib

>>>importlib.reload(bar)

successfultobeimported

重载模块方法四

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

>>>fromfooimportbar

successfultobeimported

>>>fromfooimportbar

>>>

>>>bar.__spec__.loader.load_module()

successfultobeimported

重载模块方法五

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

>>>importfoo.bar

successfultobeimported

>>>

>>>importfoo.bar

>>>

>>>importsys

>>>sys.modules['foo.bar']

>>>delsys.modules['foo.bar']

>>>

>>>importfoo.bar

successfultobeimported

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

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

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

>>>importfoo.bar

successfultobeimported

>>>

>>>importfoo.bar

>>>

>>>importsys

>>>delsys.modules['foo.bar']

>>>fromfooimportbar

>>>

以上内容为大家介绍了Python之模块重载的五种方法,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

python异步中selectors的使用

2023-11-14

python交集有什么作用?

2023-11-14

pythonfloat函数怎么用

2023-11-14

最新文章NEW

pythonreversed的反向迭代

2023-11-14

python匿名函数的命名规则

2023-11-14

python使用协程的缺点

2023-11-14

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>