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 相关文章推荐
在Django的通用视图中处理Context的方法
Jul 21 Python
tf.truncated_normal与tf.random_normal的详细用法
Mar 05 Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 Python
Pycharm简单使用教程(入门小结)
Jul 04 Python
python requests证书问题解决
Sep 05 Python
使用 Supervisor 监控 Python3 进程方式
Dec 05 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
基于TensorFlow中自定义梯度的2种方式
Feb 04 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Python如何在循环内使用list.remove()
Jun 01 Python
python集合能干吗
Jul 19 Python
python状态机transitions库详解
Jun 02 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+Html+缓存
2006/11/25 PHP
PHP写UltraEdit插件脚本实现方法
2011/12/26 PHP
php中使用preg_match_all匹配文章中的图片
2013/02/06 PHP
1亿条数据如何分表100张到Mysql数据库中(PHP)
2015/07/29 PHP
PHP读取zip文件的方法示例
2016/11/17 PHP
php查询内存信息操作示例
2019/05/09 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
jquery blockUI 遮罩不能消失与不能提交的解决方法
2011/09/17 Javascript
面向对象Javascript核心支持代码分享
2012/05/23 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
js选项卡的实现方法
2015/02/09 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
js实现纯前端的图片预览
2016/04/27 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
深入理解Vue.js源码之事件机制
2017/09/27 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
Vue源码探究之虚拟节点的实现
2019/04/17 Javascript
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
pycharm远程调试openstack代码
2017/11/21 Python
python使用筛选法计算小于给定数字的所有素数
2018/03/19 Python
python try 异常处理(史上最全)
2019/03/07 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
在windows下使用python进行串口通讯的方法
2019/07/02 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
HTML5 3D衣服摇摆动画特效
2016/03/17 HTML / CSS
美国礼品卡交易网站:Cardpool
2018/08/27 全球购物
自荐信范文
2013/12/10 职场文书
大学生入党自传2015
2015/06/26 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
行为规范主题班会
2015/08/13 职场文书