2011-05-01 142 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