2011-05-01 143 views
2

我想从列表中创建新变量。Python - 使用列表创建新变量

例如:

mylist=[A,B,C] 

从中我想创建以下变量:

self.varA 
self.varB 
self.varC 

如何创建在一个循环中,这些新的变量?

回答

6
mylist=['A','B','C'] 
for name in mylist: 
    setattr(self, name, None) 

但这是几乎总是一个坏主意和值应在像字典:

self.v = {} 
for name in mylist: 
    self.v[name] = None 
+3

+1,只是因为你可以在Python中做一些事情并不意味着你应该 – sjr 2011-05-01 07:33:22

+0

非常感谢你回答丹! – Zvi 2011-05-01 07:41:28

0

你的问题忽略了一个事实,该变量需要值...谁去供应什么价值如何?这里是一个解决方案一个的可能澄清的问题:

通过这种方法,您的构造函数的调用者可以使用一个字典或关键字参数传入的名称和值。

>>> class X(object): 
...  def __init__(self, **kwargs): 
...   for k in kwargs: 
...    setattr(self, k, kwargs[k]) 
... 

# using a dict 

>>> kandv = dict([('foo', 'bar'), ('magic', 42), ('nix', None)]) 
>>> print X(**kandv).__dict__ 
{'nix': None, 'foo': 'bar', 'magic': 42} 

# using keyword args 

>>> print X(foo='bar', magic=42, nix=None).__dict__ 
{'nix': None, 'foo': 'bar', 'magic': 42} 
+0

其实我管理权与以下方式SETATTR和GETATTR得到它: 对于C在curlist: SETATTR(自我 “penum” + C,0) ... ... 值1 = GETATTR(个体经营(entlistnum [ n] + curlist [c])) setattr(self,(entlistnum [n] + curlist [c]),valueel + 1) 无论如何,谢谢您宝贵的解释。 – Zvi 2011-05-03 07:14:09