当前位置:  编程技术>python

Python中使用动态变量名的方法

    来源: 互联网  发布时间:2014-10-04

    本文导语:  如果要写一个程序,让x1为1,x2为2,然后直到x100为100,你会怎么做? 在C这种静态语言里,变量名这个标识符实际上会被编译器直接翻译成内存地址,所以除了手动设置每个变量的值以外,没办法做到这点。而Python这种动态语...

如果要写一个程序,让x1为1,x2为2,然后直到x100为100,你会怎么做?

在C这种静态语言里,变量名这个标识符实际上会被编译器直接翻译成内存地址,所以除了手动设置每个变量的值以外,没办法做到这点。而Python这种动态语言则是可以做到的。

最容易想到的自然是eval,但是实际上根本不需要这种危险的东西,因为Python的变量名就是一个字典的key而已。要获取这个字典,直接用locals和globals函数即可。

因此这个程序可以这样实现:

代码如下:

>>> names = locals()
>>> for i in xrange(1, 101):
...   names['x%s' % i] = i
...
>>> x1
1
>>> x2
2
>>> x100
100

不过你也许会说这个例子没什么用,毕竟用数组来实现更为实用。

那么再考虑一个例子:服务器使用一种对象数据库,可以直接保存对象到数据库中。服务器列出目前支持的所有类,而用户想添加一个不存在于列表中的类,于是向服务器发送一段JSON或XML文本。服务器解析这段文本,将它转换成一个class对象,并且设置类名。之后用户就可以随意生成这个类的对象。
关键是这个数据库和类名相关,你不能用一个通用的Object类来保存所有的对象,否则查询时就乱套了。
而恰巧的是,还就有人在GAE论坛上提出了这个需求,而只会Java的他最终只能放弃。

当然,你想用来恶搞也行:

代码如下:

>>> locals()['True'] = False
>>> True
False

另一个用处就是测试一个变量名是否已经存在。标准的做法是try...except一个NameError异常,实际上直接用in locals()或in globals()就能判断了。
顺便再介绍另一种奇怪的方法,不知道有人这样写过没:

代码如下:

>>> import __main__
>>> hasattr(__main__, 'x')
False
>>> setattr(__main__, 'x', 1)
>>> x
1
>>> hasattr(__main__, 'x')
True

当然,没有任何人推荐你这样写,我也不会。

最后,除了动态设置变量名,动态删除也是可以的,例如del locals()['x1']。同样,delattr也是可用的。


    
 
 

您可能感兴趣的文章:

  • Python中变量交换的例子
  • python的类变量和成员变量用法实例教程
  • Python判断变量是否已经定义的方法
  • Python交换变量
  • python 输出一个两行字符的变量
  • python共享引用(多个变量引用)示例代码
  • Python 变量类型及命名规则介绍
  • python实现跨文件全局变量的方法
  • python异常信息堆栈输出到日志文件 iis7站长之家
  • Python实现全局变量的两个解决方法
  • Python使用函数默认值实现函数静态变量的方法
  • Python中请使用isinstance()判断变量类型
  • python基础教程之基本数据类型和变量声明介绍
  • python动态加载变量示例分享
  • pyv8学习python和javascript变量进行交互
  • Python程序设计入门(2)变量类型简介
  • Python和Ruby中each循环引用变量问题(一个隐秘BUG?)
  • python中的实例方法、静态方法、类方法、类变量和实例变量浅析
  • python和shell变量互相传递的几种方法
  • python基础教程之简单入门说明(变量和控制语言使用方法)
  • Python获取网页编码的方法及示例代码
  • 使用setup.py安装python包和卸载python包的方法
  • Python通过正则表达式获取,去除(过滤)或者替换HTML标签的几种方法
  • 如何运行Python程序的方法
  • python对XML的解析方法(SAX,DOM,ElementTree)介绍
  • Python3实现生成随机密码的方法
  • python list 合并连接字符串的方法
  • Python开发的单词频率统计工具wordsworth使用方法
  • Python实现多行注释的另类方法
  • python中定义结构体的方法
  • python字符串排序方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Python不使用print而直接输出二进制字符串
  • python基础教程之python消息摘要算法使用示例
  • Python namedtuple(命名元组)使用实例
  • 使用python删除nginx缓存文件示例(python文件操作)
  • 如何使用linux下gdb来调试python程序
  • pycharm 使用心得(九)解决No Python interpreter selected的问题
  • 在Python3中使用urllib实现http的get和post提交数据操作
  • linux系统使用python获取内存使用信息脚本分享
  • 在Python中使用SWIG调用C和C++程序
  • 使用python Django做网页
  • juqery的python实现:pyquery学习使用教程
  • python文件读写并使用mysql批量插入示例分享(python操作mysql)
  • numpy官方下载安装以及numpy详细使用教程(Python科学计算)
  • Python数组条件过滤filter函数使用示例
  • python使用循环实现批量创建文件夹示例
  • Python pass 语句使用示例
  • 在python中的socket模块使用代理实例
  • linux系统使用python监控apache服务器进程脚本分享
  • 新手使用ubuntu安装python和jdk不能,急求解~!!
  • python命令行参数sys.argv使用示例
  • python中使用urllib2获取http请求状态码的代码例子
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • 让python同时兼容python2和python3的8个技巧分享
  • Python中实现json字符串和dict类型的互转
  • 不小心把linux自带的python卸载了,导致安装一个依赖原python的软件不能安装,请问该怎么办?
  • python异常信息堆栈输出到日志文件
  • python读取csv文件示例(python操作csv)
  • python下用os.execl执行centos下的系统时间同步命令ntpdate
  • 新手该如何学python怎么学好python?
  • Python namedtuple对象json序列化/反序列化及对象恢复
  • python学习手册中的python多态示例代码


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3