python实现可变变量名-Python教程

资源魔 27 0

这篇文章次要引见了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使用问题 可变变量名

抱歉,评论功能暂时关闭!