文章内容为原创,欢迎转载请注明出处

作者: EflyPro->晦明禅师

文章来源:公众号“睿江云计算”

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

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

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

【睿普专栏】人生苦短,我用Python

背景

程序模块化是软件工程里面一个常见的设计思想,在软件开发中也比较常见,可以把代码解耦,特别是在面对多人同时开发或者需要经常变动升级。我们使用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模块,需要的时候动态更新然后重新加载到主程序里面,可以完美实现不中断服务升级。

go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区相关推荐

  1. textview html字体颜色变粗,安卓使用Html实现textview部分字体变色加粗的效果(使用Html实现多种字体效果)-Go语言中文社区...

    先祝大家新年快乐呀. 写这个只是个人觉得Html的标签用起来比较方便的,直接拼接字符串就实现了, 用这种方法是和前端一样使用标签的形式完成的,但不是支持所有的功能,毕竟是textview,只支持一部分 ...

  2. python简笔画绘制 数据驱动绘图恐龙_使用python turtle绘制简笔画大白-Go语言中文社区...

    使用python turtle绘制简笔画大白 完整代码: import turtle as t pen = t.Turtle() # 定义画笔实例 pen.speed(0) pen.pensize(5 ...

  3. python语言例子_【Python】SimPy的使用示例-Go语言中文社区

    使用SimPY进行离散事件仿真 SimPY是一个Python下的第三方库,可以方便的进行离散事件的仿真.仿真速度比较快.下面记录一下我的一点心得,不保证完全正确,供参考. 安装 $ pip insta ...

  4. shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...

    NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 1)标准输入.标准输出及标准错误输出的接口: child.stdin 获取标准输入 child.stdout 获取标准输出 chi ...

  5. 给 python 初学者的四条忠告_给 python 初学者的四条忠告-Go语言中文社区

    1. 不要纠结于开发工具的选择,简单直接就是最好的 学习一种编程语言,首先要找一款合用的集成开发工具,似乎是自然而然的想法.为什么不呢?IDE可以自动补齐,可以一键运行,还可以断点调试.使用IDE开发 ...

  6. python简笔画蚂蚁_使用python turtle绘制简笔画大白-Go语言中文社区

    使用python turtle绘制简笔画大白 完整代码: import turtle as t pen = t.Turtle() # 定义画笔实例 pen.speed(0) pen.pensize(5 ...

  7. python保存为mat文件_python读取文件——python读取和保存mat文件-Go语言中文社区

    首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法: 图片大 ...

  8. python写出表白_用Python写一个简单的表白-Go语言中文社区

    import turtle import random def love(x,y):#在(x,y)处画爱心lalala lv=turtle.Turtle() lv.hideturtle() lv.up ...

  9. python from numpy import,python zeros()使用(from numpy import *)-Go语言中文社区

    参考: ############################################################ 函数zeros()在模块numpy中: from numpy impo ...

最新文章

  1. 大厂程序员跳槽去小公司当CTO,是一种怎样的体验?
  2. Zabbix监控之graphs(图形或数据图)
  3. Android TextView中图文混排设置行间距导致高度不一致问题解决
  4. # 自定义异常类 问题: 请使用代码实现 每一个学生(Student)都有学号,姓名和分数,分数永远不能为负数 如果老师给学生赋值一个负数,抛出一个自定异常
  5. linux查看openssh和openssl版本命令
  6. 使用Putty密钥认证机制远程登录Linux
  7. 肖申克的救赎,阅后瞎想...(zz)写的不错
  8. JVM 方法调用之动态分派
  9. chinapub matlab,MATLAB与通信仿真
  10. 解决Google浏览器中Flash插件禁用问题
  11. Linux(五、六)文本处理,文件内容显示和文件其他操作学习
  12. antd页面多表单校验
  13. ORACLE drop user时遇到的ORA-00604和ORA-00942错误排查
  14. 校园生存手册之Linux下锐捷认证
  15. 3G的发展:(4)大洋洲
  16. 反射望远镜的发展历程(2)
  17. nanomsg.nng 在windows下的编译
  18. python不包含某字符_python正则表达式匹配不包含某几个字符的字符串方法
  19. 【Numpy学习笔记】
  20. Android 退出登录后回到登录页并清空原有的任务栈

热门文章

  1. 特征工程(一)countvectororizer
  2. 博客文章也能中顶会:ICLR 2022开设博客投稿通道,还有机会跟经典论文原作者直接battle...
  3. Epoch不仅过时,而且有害?Reddit机器学习板块展开讨论
  4. 谁是全球最顶级AI实验室?
  5. 图像风格迁移也有框架了
  6. PyTorch官方教程大更新:增加标签索引,更加新手友好
  7. 假如曹操是一名程序员,会发生什么?
  8. 【每日一算法】相交链表
  9. 端到端伪激光图像3D目标检测
  10. 动手推导Self-Attention