python动态加载变量示例分享


Posted in Python onFebruary 17, 2014

众所周知,程序在启动后,各个程序文件都会被加载到内存中,这样如果程序文本再次变化,对当前程序的运行没有影响,这对程序是一种保护。

但是,对于像python这样解释执行的语言,我们有时候会用到“from 模块 import 变量名”这样的形式,如果这个变量直接被定义在文件当中,那么这些变量在程序开始时就会被定义、赋值,运行过程中值不变。如果打算在运行过程中对这个模块进行重写,那么更改后的变量值是无法被使用的。

对于这个问题,可以换一种思路,将这个模块中的变量定义在函数里,而函数是在程序运行的时候动态执行的,这样就能够获取到变量的最新值。下面是例子:

首先,不使用函数的情况: 

#model1.py
p_hello = 'hello world!'
#test1.py
from model1 import p_hello
file = open('model1.py', 'w')
file.write("p_hello = '%s!'"%('hello you'))
file.close()
print p_hello

这样,执行test1.py的时候,出现的结果仍然是'hello world',而非‘hello you',说明变量已经加载到内存中,尽管该模块的文件在硬盘上已经被重写。

接下来,使用函数的情况:

#model1.py
def rule():
    p_hello = 'hello world!'
    return locals()
#test1.py
from model1 import rule
file = open('model1.py', 'w')
file.write('def rule():\n')
file.write("    p_hello = '%s!'\n"%('hello you'))
file.write("    return locals()\n")
file.close()
p_hello = rule()['p_hello']
print p_hello

这样,print出来的结果就是hello you 了,因为在运行的时候,先执行了一遍这个函数,再通过函数获取了这个变量,这样就会获得新值。

Python 相关文章推荐
Python同时向控制台和文件输出日志logging的方法
May 26 Python
Python中表达式x += y和x = x+y 的区别详解
Jun 20 Python
Python实现手写一个类似django的web框架示例
Jul 20 Python
几行Python代码爬取3000+上市公司的信息
Jan 24 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
Pytorch 搭建分类回归神经网络并用GPU进行加速的例子
Jan 09 Python
解决Windows下python和pip命令无法使用的问题
Aug 31 Python
Python调用SMTP服务自动发送Email的实现步骤
Feb 07 Python
Python实现为PDF去除水印的示例代码
Apr 03 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 Python
Python 一键获取电脑浏览器的账号密码
May 11 Python
python文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 #Python
python实现bitmap数据结构详解
Feb 17 #Python
python实现ftp客户端示例分享
Feb 17 #Python
用smtplib和email封装python发送邮件模块类分享
Feb 17 #Python
python类参数self使用示例
Feb 17 #Python
python实现爬虫下载漫画示例
Feb 16 #Python
python发送邮件示例(支持中文邮件标题)
Feb 16 #Python
You might like
PHP上传文件参考配置大文件上传
2015/12/16 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
jQuery focus和blur事件的应用详解
2014/01/26 Javascript
动态添加option及createElement使用示例
2014/01/26 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
jquery中EasyUI实现异步树
2015/03/01 Javascript
jQuery弹出遮罩层效果完整示例
2016/09/13 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
vue指令之表单控件绑定v-model v-model与v-bind结合使用
2019/04/17 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
jquery实现有过渡效果的tab切换
2020/07/17 jQuery
Python字符串处理之count()方法的使用
2015/05/18 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
劳动实践课感言
2014/02/01 职场文书
毕业自我评价
2014/02/05 职场文书
广告语设计及教案
2014/03/21 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
个人委托书
2014/07/31 职场文书
2014个人反腐倡廉思想汇报
2014/09/15 职场文书
幼儿园教师工作总结2015
2015/04/02 职场文书
担保贷款承诺书
2015/04/30 职场文书
2015暑期爱心支教策划书
2015/07/14 职场文书
Go语言grpc和protobuf
2022/04/13 Golang
instantclient客户端 连接oracle数据库
2022/04/26 Oracle