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中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
Python numpy中矩阵的基本用法汇总
Feb 12 Python
Python弹出输入框并获取输入值的实例
Jun 18 Python
pytorch 自定义数据集加载方法
Aug 18 Python
python生成随机红包的实例写法
Sep 02 Python
Django实现文件上传下载功能
Oct 06 Python
解决Tensorflow sess.run导致的内存溢出问题
Feb 05 Python
tensorflow实现从.ckpt文件中读取任意变量
May 26 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
利用Python第三方库实现预测NBA比赛结果
Jun 21 Python
python入门学习关于for else的特殊特性讲解
Nov 20 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+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
PHP file_exists问题杂谈
2012/05/07 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
2014/06/13 PHP
thinkphp验证码的实现(form、ajax实现验证)
2016/07/28 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
PHP设计模式之原型模式定义与用法详解
2018/04/03 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
用于table内容排序
2006/07/21 Javascript
Jquery插件 easyUI属性汇总
2011/01/19 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
微信小程序实现登录遮罩效果
2018/11/01 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
vue框架制作购物车小球动画效果实例代码
2019/09/26 Javascript
Vue替代marquee标签超出宽度文字横向滚动效果
2019/12/09 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
[02:44]2014DOTA2 国际邀请赛中国区预选赛 大神红毯秀
2014/05/25 DOTA
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
Python可跨平台实现获取按键的方法
2015/03/05 Python
Python内置函数OCT详解
2016/11/09 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
利用keras使用神经网络预测销量操作
2020/07/07 Python
css 元素选择器的简单实例
2016/05/23 HTML / CSS
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
豪华床上用品、床单和浴室必需品:Peacock Alley
2019/09/04 全球购物
学生安全责任书
2014/04/15 职场文书
激励口号大全
2014/06/17 职场文书
奉献爱心演讲稿
2014/09/04 职场文书
讲文明懂礼貌演讲稿
2014/09/11 职场文书
个人批评与自我批评材料
2014/10/17 职场文书
导游词之山西祁县乔家大院
2019/10/14 职场文书
详解Nginx 工作原理
2021/03/31 Servers
Redis Cluster 字段模糊匹配及删除
2021/05/27 Redis