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多进程库multiprocessing中进程池Pool类的使用详解
Nov 24 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
Python循环结构的应用场景详解
Jul 11 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
pycharm 安装JPype的教程
Aug 08 Python
Python 调用 Windows API COM 新法
Aug 22 Python
Python datetime包函数简单介绍
Aug 28 Python
python小项目之五子棋游戏
Dec 26 Python
Python实现加密接口测试方法步骤详解
Jun 05 Python
python利用pandas分析学生期末成绩实例代码
Jul 09 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中通过ADODB库实现调用Access数据库之修正版本
2006/12/31 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
详细解读PHP的Yii框架中登陆功能的实现
2015/08/21 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
PHP获取真实IP及IP模拟方法解析
2020/11/24 PHP
Javascript中的常见排序算法
2007/03/27 Javascript
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
jquery库或JS文件在eclipse下报错问题解决方法
2014/04/17 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
javascript中return,return true,return false三者的用法及区别
2015/11/17 Javascript
基于Node.js的JavaScript项目构建工具gulp的使用教程
2016/05/20 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
详解微信小程序 登录获取unionid
2017/06/27 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
mpvue+vuex搭建小程序详细教程(完整步骤)
2018/09/30 Javascript
[48:53]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第一场
2014/05/26 DOTA
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
python中报错"json.decoder.JSONDecodeError: Expecting value:"的解决
2019/04/29 Python
HTML5 实现一个访问本地文件的实例
2012/12/13 HTML / CSS
iframe与window.onload如何使用详解
2020/05/07 HTML / CSS
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
个人职业生涯规划书1500字
2013/12/31 职场文书
代理协议书
2014/04/22 职场文书
应聘会计求职信
2014/06/11 职场文书
2015年师德师风自我评价范文
2015/03/05 职场文书
Python基础之hashlib模块详解
2021/05/06 Python
go语言基础 seek光标位置os包的使用
2021/05/09 Golang