继第一期【人生苦短我用Python系列专栏】发布后,深受广大睿普迷的一致好评,经常问小普第二期什么时候出呀?好期待~

来来来小普这就呈上第二期【02动态加载模块】

错过了第一期的小伙伴们可以点此穿越哦

【睿普专栏】人生苦短,我用Python​mp.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)动态加载模块相关推荐

  1. 人生苦短我用python梗_人生苦短我用python: eval,e

    01.函数原型 eval(expression[, globals[, locals]]) python提供内置函数 eval 可以执行或者解释一串python表达式,这里的表达式仅限于一些运算操作, ...

  2. python删除文件夹无法访问_人生苦短 我学Python——anaconda和Jupyter notebook安装使用...

    一.人生苦短 我学Python 为什么学习Python? 1.应用范围广 很多网站是用Python开发的,比如豆瓣,还有YouTube等等. 2.效率高,和其他编程语言对比,可以用少得多的代码写出相同 ...

  3. python编程快速上手-----让繁琐工作自动化_每周一书《Python编程快速上手 让繁琐工作自动化》分享!...

    内容简介 如今,人们面临的大多数任务都可以通过编写计算机软件来完成.Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.通过Python编程,我们能够解决现实生活中的很多任务. 本书是 ...

  4. 红星加星红加星红等于爱星星_如何从Google Reader导出已加星标的项目

    红星加星红加星红等于爱星星 If your reaction to the announced demise of Google Reader was to scream "But my s ...

  5. 零基础python入门密歇根大学安娜堡分校_零基础:Python入门,看这篇就够了~ 王磊...

    Python在设计上坚持了清晰划一的风格,这使得Python成为一门易读.易维护,并且被大量用户所欢迎的.用途广泛的语言. 设计者开发时总的指导思想是,对于一个特定的问题,只要有一种最好的方法来解决就 ...

  6. python 用if判断一个数是不是整数_五天学会Python基础02(下)

    函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. 事实上,上面的问题等同于将8个苹果分成四组每组至少一个苹果有多少种方案.想到这一点问题的答案就呼之 ...

  7. python读取只读word只读_人生苦短我学Python——Word处理之快速Word转PDF

    上回书说到Python对于Excel的操作,本回书咱们来说一说Python对于Word的操作.这次的需求是这样的:把若干个Word文档转换为PDF格式.起因呢,是因为公司经常会披露公告.法律文件等,这 ...

  8. python json传参数可以传对象吗_廖雪峰的python系列教程(52)——IO编程之序列化...

    序列化 在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict: d = dict(name='Bob', age=20, score=88) 可以随时修改变量,比如把name改成'Bil ...

  9. 人生苦短我用python壁纸_人生苦短我用Python分分钟下载知乎美图给你看

    为什么说"人生苦短,我用python"? 为什么说人生苦短我用python Question 1 Python是什么 2 人们为什么用Python 3 Python是脚本语言吗 P ...

最新文章

  1. Golang中常用的并发模型
  2. 微信公众平台开发:进阶篇(Web App开发入门)
  3. python office自动化_Python office automation:文档,python,自动化,办公,文件,篇,整理,一键,完成...
  4. WCF绑定细节(2)——绑定,绑定元素
  5. 老照片特效 php,一键制作破旧复古老照片特效PS动作
  6. InnoDB引擎与MyIASM的一点总结
  7. java进程调度怎么画图,[Java教程]进程调度的两种算法JAVA实现
  8. 一个简单简洁的社交媒体共享菜单
  9. ASP.NET Cache缓存管理基于web的缓存
  10. 上采样层什么意思_佛前上三柱香、磕三个头是什么意思!
  11. 二维条码 PDF417 zxing-cpp解码详细过程
  12. 试用钉钉内网映射工具
  13. 举例说明计算机在现实应用中的作用,【举例说明多媒体技术的应用】_论多媒体技术在日常工作生活中的应用...
  14. 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
  15. 电信主机托管费用_服务器托管的收费标准(必读)
  16. Android进阶(九)APP编程感想
  17. 【PAT甲级】1021 Deepest Root (25 分)(暴力,DFS)
  18. Jmeter+badboy自动化测试——Badboy基础操作
  19. PHP中的opcode
  20. 高等数学(第七版)同济大学 习题12-1 个人解答

热门文章

  1. web元件库、axure元件库、通用元件库、常用web组件、常用表单、框架、数据表单、导航栏、边框、图标、列表、日期时间选择器、评分组件、穿梭框、输入框、步骤条、图表组件、数据可视化、后台模板、时间轴
  2. 天池实验室-Task02-Python入门(中)
  3. C++反汇编第一讲,认识构造函数,析构函数,以及成员函数
  4. 关于移动端点击事件的问题
  5. 洛谷 P4549 【模板】裴蜀定理
  6. 推荐系统之CTR预估-FNN模型解析
  7. CF1041F Ray in the tube构造_思维
  8. 查询数据库中所有表名称
  9. Cookie、Session、Token
  10. RK3288 制作内核开机logo