在python中动态生成变量名

2024-05-19 05:21: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列,那么显式地键入每列的名称似乎是一项繁重的工作。所以,我想知道是否有一种方法可以快速生成这些列名。


Tags: 编辑列表定义方式手动pytables建议prices
3条回答

在对象上,可以通过setattr来实现这一点

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

如果您真的想动态创建它们,可以根据要在哪个命名空间中创建它们,将其分配给由globals()locals()返回的dict:

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

但我不建议这么做。一般来说,避免全局变量。使用locals()常常会模糊您真正在做的事情。相反,创建自己的dict并分配给它。

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

学习python禅;运行它并将其充分挖掘:

>>> import this

虽然我看不出什么重点,但这里是:

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

相关问题 更多 >

    热门问题