在python中生成变量名称

时间:2010-10-24 22:38:35

标签: 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 个答案:

答案 0 :(得分:39)

如果您确实想要动态创建它们,可以分配给globals()locals()返回的dict,具体取决于您要在其中创建它们的命名空间:

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

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

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

学习python zen;跑这个并且好好理解:

>>> import this

答案 1 :(得分:29)

虽然我没有看到太多意思,但这里是:

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

答案 2 :(得分:18)

在对象上,您可以使用setattr

实现此目的
>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5

答案 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

答案 4 :(得分:6)

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

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

答案 5 :(得分:3)

有点长,它的确有效......

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])