go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区
文章内容为原创,欢迎转载请注明出处
作者: 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语言中文社区相关推荐
- textview html字体颜色变粗,安卓使用Html实现textview部分字体变色加粗的效果(使用Html实现多种字体效果)-Go语言中文社区...
先祝大家新年快乐呀. 写这个只是个人觉得Html的标签用起来比较方便的,直接拼接字符串就实现了, 用这种方法是和前端一样使用标签的形式完成的,但不是支持所有的功能,毕竟是textview,只支持一部分 ...
- python简笔画绘制 数据驱动绘图恐龙_使用python turtle绘制简笔画大白-Go语言中文社区...
使用python turtle绘制简笔画大白 完整代码: import turtle as t pen = t.Turtle() # 定义画笔实例 pen.speed(0) pen.pensize(5 ...
- python语言例子_【Python】SimPy的使用示例-Go语言中文社区
使用SimPY进行离散事件仿真 SimPY是一个Python下的第三方库,可以方便的进行离散事件的仿真.仿真速度比较快.下面记录一下我的一点心得,不保证完全正确,供参考. 安装 $ pip insta ...
- shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...
NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 1)标准输入.标准输出及标准错误输出的接口: child.stdin 获取标准输入 child.stdout 获取标准输出 chi ...
- 给 python 初学者的四条忠告_给 python 初学者的四条忠告-Go语言中文社区
1. 不要纠结于开发工具的选择,简单直接就是最好的 学习一种编程语言,首先要找一款合用的集成开发工具,似乎是自然而然的想法.为什么不呢?IDE可以自动补齐,可以一键运行,还可以断点调试.使用IDE开发 ...
- python简笔画蚂蚁_使用python turtle绘制简笔画大白-Go语言中文社区
使用python turtle绘制简笔画大白 完整代码: import turtle as t pen = t.Turtle() # 定义画笔实例 pen.speed(0) pen.pensize(5 ...
- python保存为mat文件_python读取文件——python读取和保存mat文件-Go语言中文社区
首先我们谈谈MarkDown编辑器,我感觉些倒是挺方便的,因为用惯了LaTeX,对于MarkDown还是比较容易上手的,但是我发现,MarkDown中有这样几个问题一直没能找到具体的解决方法: 图片大 ...
- python写出表白_用Python写一个简单的表白-Go语言中文社区
import turtle import random def love(x,y):#在(x,y)处画爱心lalala lv=turtle.Turtle() lv.hideturtle() lv.up ...
- python from numpy import,python zeros()使用(from numpy import *)-Go语言中文社区
参考: ############################################################ 函数zeros()在模块numpy中: from numpy impo ...
最新文章
- 大厂程序员跳槽去小公司当CTO,是一种怎样的体验?
- Zabbix监控之graphs(图形或数据图)
- Android TextView中图文混排设置行间距导致高度不一致问题解决
- # 自定义异常类 问题: 请使用代码实现 每一个学生(Student)都有学号,姓名和分数,分数永远不能为负数 如果老师给学生赋值一个负数,抛出一个自定异常
- linux查看openssh和openssl版本命令
- 使用Putty密钥认证机制远程登录Linux
- 肖申克的救赎,阅后瞎想...(zz)写的不错
- JVM 方法调用之动态分派
- chinapub matlab,MATLAB与通信仿真
- 解决Google浏览器中Flash插件禁用问题
- Linux(五、六)文本处理,文件内容显示和文件其他操作学习
- antd页面多表单校验
- ORACLE drop user时遇到的ORA-00604和ORA-00942错误排查
- 校园生存手册之Linux下锐捷认证
- 3G的发展:(4)大洋洲
- 反射望远镜的发展历程(2)
- nanomsg.nng 在windows下的编译
- python不包含某字符_python正则表达式匹配不包含某几个字符的字符串方法
- 【Numpy学习笔记】
- Android 退出登录后回到登录页并清空原有的任务栈