python动态加载模块有什么用_人生苦短我用python(02)动态加载模块
继第一期【人生苦短我用Python系列专栏】发布后,深受广大睿普迷的一致好评,经常问小普第二期什么时候出呀?好期待~
来来来小普这就呈上第二期【02动态加载模块】
错过了第一期的小伙伴们可以点此穿越哦
【睿普专栏】人生苦短,我用Pythonmp.weixin.qq.com
背景
程序模块化是软件工程里面一个常见的设计思想,在软件开发中也比较常见,可以把代码解耦,特别是在面对多人同时开发或者需要经常变动升级。我们使用windows常见的dll就是模块化的一个例子,一个软件升级功能,可能就只需要升级一些dll文件就可以了,主体程序不用改动,又比如一些新功能可以用模块的方式加载等,不仅有利于开发者还方便了使用者。
python的动态加载模块
在python里面,导入一个模块使用的是
import 文件名
python会在sys.path里面寻找匹配名称的文件(py,pyo,pyc,pyd,so,dll等),我们可以在python里面打印sys.path是些什么目录
import sys
sys.path
#返回下面内容
['','/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/python2.6/plat-linux2',
'/usr/lib64/python2.6/lib-tk', '/usr/lib64/python2.6/lib-old', '/usr/lib64/python2.6/lib-dynload', '/usr/lib64/python2.6/site-packages', '/usr/lib64/python2.6/site-packages/gtk-2.0', '/usr/lib/python2.6/site-packages', '/usr/lib/python2.6/site-packages/setuptools-0.6c11-py2.6.egg-info']
在代码运行目录下的文件名也可以作为模块名导入,比如当前目录下有一个名字叫tools.py的文件,直接在代码里面import这个文件名导入。import之后的模块会保存在sys.modules里面
import sys
import tools
tools
#返回下面内容
#我们看看当前我们加载的模块
我们可以看到我们刚才加载的tools.py
但是import只能够加载固定名称模块,不能加载动态比如字符串名称模块,比如
str = 'tools'
import str
# 提示错误
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named str
这个时候,我们需要用到`__import__`,这是一个python的内置函数,import底层其实也是使用了这个函数加载模块的,我们可以看看
__import__
#返回
str = 'tools'
__import__(str)
#返回加载tools.py成功
好了,现在解决了动态加载随意模块的问题了,但是距离成功还有一步之遥,在python里面,加载模块是有缓存的,意思就是说,加载tools.py之后,就算tools.py内容发生改变了,都不会重新加载,还是无法满足我们实时更新加载模块的需求。这里有个比较简单的办法,可以使得模块有需要的时候重新加载,回想之前我们说过,python加载后的模块都会保存在sys.modules里面,我们只需要在重新加载模块之前,把模块从sys.modules里面删除即可。
del sys.modules['tools']
__import__('tools')
使用python这样的特性,我们写代码的时候,就可以把经常需要变动的剥离出来成为一个python模块,需要的时候动态更新然后重新加载到主程序里面,可以完美实现不中断服务升级。
python动态加载模块有什么用_人生苦短我用python(02)动态加载模块相关推荐
- 人生苦短我用python梗_人生苦短我用python: eval,e
01.函数原型 eval(expression[, globals[, locals]]) python提供内置函数 eval 可以执行或者解释一串python表达式,这里的表达式仅限于一些运算操作, ...
- python删除文件夹无法访问_人生苦短 我学Python——anaconda和Jupyter notebook安装使用...
一.人生苦短 我学Python 为什么学习Python? 1.应用范围广 很多网站是用Python开发的,比如豆瓣,还有YouTube等等. 2.效率高,和其他编程语言对比,可以用少得多的代码写出相同 ...
- python编程快速上手-----让繁琐工作自动化_每周一书《Python编程快速上手 让繁琐工作自动化》分享!...
内容简介 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 本书是 ...
- 红星加星红加星红等于爱星星_如何从Google Reader导出已加星标的项目
红星加星红加星红等于爱星星 If your reaction to the announced demise of Google Reader was to scream "But my s ...
- 零基础python入门密歇根大学安娜堡分校_零基础:Python入门,看这篇就够了~ 王磊...
Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言. 设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就 ...
- python 用if判断一个数是不是整数_五天学会Python基础02(下)
函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. 事实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案.想到这一点问题的答案就呼之 ...
- python读取只读word只读_人生苦短我学Python——Word处理之快速Word转PDF
上回书说到Python对于Excel的操作,本回书咱们来说一说Python对于Word的操作.这次的需求是这样的:把若干个Word文档转换为PDF格式.起因呢,是因为公司经常会披露公告.法律文件等,这 ...
- python json传参数可以传对象吗_廖雪峰的python系列教程(52)——IO编程之序列化...
序列化 在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bil ...
- 人生苦短我用python壁纸_人生苦短我用Python分分钟下载知乎美图给你看
为什么说"人生苦短,我用python"? 为什么说人生苦短我用python Question 1 Python是什么 2 人们为什么用Python 3 Python是脚本语言吗 P ...
最新文章
- Golang中常用的并发模型
- 微信公众平台开发:进阶篇(Web App开发入门)
- python office自动化_Python office automation:文档,python,自动化,办公,文件,篇,整理,一键,完成...
- WCF绑定细节(2)——绑定,绑定元素
- 老照片特效 php,一键制作破旧复古老照片特效PS动作
- InnoDB引擎与MyIASM的一点总结
- java进程调度怎么画图,[Java教程]进程调度的两种算法JAVA实现
- 一个简单简洁的社交媒体共享菜单
- ASP.NET Cache缓存管理基于web的缓存
- 上采样层什么意思_佛前上三柱香、磕三个头是什么意思!
- 二维条码 PDF417 zxing-cpp解码详细过程
- 试用钉钉内网映射工具
- 举例说明计算机在现实应用中的作用,【举例说明多媒体技术的应用】_论多媒体技术在日常工作生活中的应用...
- 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
- 电信主机托管费用_服务器托管的收费标准(必读)
- Android进阶(九)APP编程感想
- 【PAT甲级】1021 Deepest Root (25 分)(暴力,DFS)
- Jmeter+badboy自动化测试——Badboy基础操作
- PHP中的opcode
- 高等数学(第七版)同济大学 习题12-1 个人解答
热门文章
- web元件库、axure元件库、通用元件库、常用web组件、常用表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴
- 天池实验室-Task02-Python入门(中)
- C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
- 关于移动端点击事件的问题
- 洛谷 P4549 【模板】裴蜀定理
- 推荐系统之CTR预估-FNN模型解析
- CF1041F Ray in the tube构造_思维
- 查询数据库中所有表名称
- Cookie、Session、Token
- RK3288 制作内核开机logo