在python中生成变量名称

Cur*_*arn 58 python

有没有办法在循环中在python中生成变量名并为它们赋值?例如,如果我有

prices = [5, 12, 45]
Run Code Online (Sandbox Code Playgroud)

我想要

price1 = 5
price2 = 12
price3 = 45
Run Code Online (Sandbox Code Playgroud)

我可以在一个循环或某事做,而不是手动分配price1 = prices[0],price2 = prices[1]等等.

谢谢.

编辑

很多人建议我写一个要求这个的理由.首先,有些时候我认为这可能比使用列表更方便...我不记得确切的时间,但我想我已经想过在有很多级别的嵌套时使用它.例如,如果有一个列表列表,以上述方式定义变量可能有助于降低嵌套级别.其次,今天我在尝试学习使用Pytables时想到了这一点.我刚看到Pytables,我看到在定义表结构时,列名和类型按以下方式描述:

class TableFormat(tables.IsDescription):
    firstColumnName = StringCol(16)
    secondColumnName = StringCol(16)
    thirdColumnName = StringCol(16)
Run Code Online (Sandbox Code Playgroud)

如果我有100列,则明确键入每列的名称似乎很多工作.所以,我想知道是否有办法动态生成这些列名.

kan*_*aka 40

如果你真的想要动态创建它们,你可以分配给globals()或locals()返回的dict,具体取决于你想要创建它们的命名空间:

globals()['somevar'] = 'someval'
print somevar  # prints 'someval'
Run Code Online (Sandbox Code Playgroud)

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

mydict = {}
mydict['somevar'] = 'someval'
print mydict['somevar']
Run Code Online (Sandbox Code Playgroud)

学习蟒蛇禅; 跑这个并且好好理解:

>>> import this
Run Code Online (Sandbox Code Playgroud)

  • 分配给locals()不一定有效,http://stackoverflow.com/questions/8028708/dynamically-set-local-variable-in-python (3认同)

Tim*_*Čas 31

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

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

  • @Bodhidarma:参见描述[在Python文档中](https://docs.python.org/2/library/functions.html#repr)---`repr()`尝试返回一个值,当传递给`eval()`(或者在这种情况下是`exec()`)产生一个具有相同值的对象.如果是字符串,它会正确地逃脱它们.*那个SAID*,你几乎不应该使用上面的代码(Python有一个非常好的概念来表示一堆变量---列表!). (4认同)

Ste*_*ini 19

在一个对象上,您可以实现此目的 setattr

>>> class A(object): pass
>>> a=A()
>>> setattr(a, "hello1", 5)
>>> a.hello1
5
Run Code Online (Sandbox Code Playgroud)


Pra*_*wan 9

我遇到了你的问题,这是我的答案:

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])
Run Code Online (Sandbox Code Playgroud)

所以在打印时:

price1 = 5 
price2 = 12
price3 = 45
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用. (3认同)

Pol*_*Geo 5

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

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