在 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个列,那么显式地输入每个列的名称似乎是一项繁重的工作。因此,我想知道是否有一种方法可以即时生成这些列名。

131288 次浏览

虽然我看不出有什么意义,但事情是这样的:

for i in xrange(0, len(prices)):
exec("price%d = %s" % (i + 1, repr(prices[i])));

如果你真的想动态地创建它们,你可以根据你想在哪个名称空间中创建它们来分配给由 globals()或者 locals()返回的 dict:

globals()['somevar'] = 'someval'
print somevar  # prints 'someval'

但我不建议你这么做。通常,避免使用全局变量。使用 locals()通常只是模糊了您真正在做的事情。相反,您可以创建自己的 dict 并分配给它。

mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']

学习蟒蛇禅; 运行这个并熟练掌握它:

>>> import this

在对象上,可以使用 setattr实现这一点

>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5

另一个例子,它实际上是 另一个答案的一个变体,因为它也使用字典:

>>> vr={}
... for num in range(1,4):
...     vr[str(num)] = 5 + num
...
>>> print vr["3"]
8
>>>

我知道你的问题,这是我的答案:

prices = [5, 12, 45]
list=['1','2','3']


for i in range(1,3):
vars()["prices"+list[0]]=prices[0]
print ("prices[i]=" +prices[i])

所以在打印的时候:

price1 = 5
price2 = 12
price3 = 45

有点长,我想还行吧。

prices = [5, 12, 45]
names = []
for i, _ in enumerate(prices):
names.append("price"+str(i+1))
dict = {}
for name, price in zip(names, prices):
dict[name] = price
for item in dict:
print(item, "=", dict[item])