在Python中动态生成变量名
有没有办法在Python中通过循环生成变量名并给它们赋值?比如说,如果我有
prices = [5, 12, 45]
我想要
price1 = 5
price2 = 12
price3 = 45
我能不能在循环中做到这一点,而不是手动一个一个地写,比如 price1 = prices[0]
、price2 = prices[1]
之类的。
谢谢。
补充说明
很多人建议我写一下为什么需要这样做。首先,有时候我觉得这样可能比用列表更方便……我不太记得具体是什么时候了,但我想我是在处理很多层嵌套的时候想到过这个。例如,如果有一个列表里面又有列表,里面再有列表,像这样定义变量可能会帮助减少嵌套的层数。其次,今天我在学习Pytables的时候想到这个。我刚接触Pytables,看到在定义表格结构时,列名和类型是这样描述的:
class TableFormat(tables.IsDescription):
firstColumnName = StringCol(16)
secondColumnName = StringCol(16)
thirdColumnName = StringCol(16)
如果我有100列,逐个输入每个列名看起来工作量很大。所以,我想知道有没有办法动态生成这些列名。
6 个回答
26
在一个对象上,你可以使用 setattr
来实现这个功能。
>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
38
虽然我觉得这没什么意义,但还是给你看看:
for i in xrange(0, len(prices)):
exec("price%d = %s" % (i + 1, repr(prices[i])));
52
如果你真的想动态创建变量,可以使用 globals()
或 locals()
来获取一个字典,然后把新变量放进去,这取决于你想在哪个命名空间里创建它们:
globals()['somevar'] = 'someval'
print somevar # prints 'someval'
不过我不建议这样做。一般来说,尽量避免使用全局变量。使用 locals()
往往会让你搞不清楚自己在做什么。更好的做法是自己创建一个字典,然后把变量放进去。
mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']
了解一下 Python 的哲学,运行这个代码,仔细体会一下:
>>> import this