在Python中生成variables名称
有没有一种方法,我可以在循环中生成python的variables名称,并为它们分配值? 例如,如果我有
prices = [5, 12, 45]
我想要
price1 = 5 price2 = 12 price3 = 45
我可以做一个循环或一些东西,而不是手动分配price2 = prices[1]
price1 = prices[0]
, price2 = prices[1]
等
谢谢。
编辑
许多人build议我写一个要求这个的理由。 首先,有些时候,我认为这可能比使用列表更方便…我不记得具体是什么时候,但是我想我有使用这个时,有很多层次的嵌套。 例如,如果有一个列表的列表,以上述方式定义variables可能有助于降低嵌套的水平。 其次,今天我想到学习Pytables的使用。 我刚刚遇到了Pytables,并且在定义表的结构时看到,列名和types按以下方式描述:
class TableFormat(tables.IsDescription): firstColumnName = StringCol(16) secondColumnName = StringCol(16) thirdColumnName = StringCol(16)
如果我有100列,显式input每列的名称似乎很多工作。 所以,我想知道是否有办法在运行中生成这些列名称。
如果你真的想要dynamic地创build它们,你可以根据你想要在其中创build的命名空间来指定由globals()或locals()返回的字典:
globals()['somevar'] = 'someval' print somevar # prints 'someval'
但我不会推荐这样做。 一般来说,避免全局variables。 使用locals()往往会掩盖你真的在做什么。 相反,创build你自己的字典,并分配给它。
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])));
在一个对象上,你可以用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
为什么你想把它们放在这样的variables中,你想消耗更多的内存:),为什么不从列表价格[0],价格[1] ….
但是到底什么可能会帮助你
price1, price2, price3 = prices