2011-03-25 43 views
2

下面我有一段代碼,它根據元組tup中的值分配值。 現在這一點的代碼太重複我的口味,我想能夠使用它的循環。幫忙清理一下Python代碼

段:

self.Levels = tup[0] 
    self.MaxX = tup[1] 
    self.MaxY = tup[2] 
    self.BW  = tup[3] 

我想一起做的以下行的東西;然而,這顯然在語法上不會在python中工作。

nametup = (self.Levels, self.MaxX, self.MaxY, self.BW) 

    for i in range(len(tup)): 
     nametup[i] = tup[i] 

編輯:

我有我的片斷更改爲:

if tup[0] != None: 
     self.Levels = tup[0] 

    if tup[1] != None: 
     self.MaxX = tup[1] 

    if tup[2] != None: 
     self.MaxY = tup[2] 

    if tup[3] != None: 
     self.BW  = tup[3] 

的,如果從我的理解語句拋出一個扳手到拆包元組的想法。有什麼建議麼?

回答

2

根據修訂後的片段:

attrs = ('Levels', 'MaxX', 'MaxY', 'BW') 
assert len(tup) == len(attrs) 
for attr, val in zip(attrs, tup): 
    if val is not None: # don't use != 
     setattr(self, attr, val) 
5

試試這個:

self.Levels, self.MaxX, self.MaxY, self.BW = tup 

這就是所謂的拆包的元組。

+0

+1 ...它不掃錯誤(像「tup」中的4個以上元素)。 – 2011-03-25 00:57:28

0

這是一種很長的路「輪,但對於比較:

attrs = ('Levels', 'MaxX', 'MaxY', 'BW') 
for attr,val in zip(attrs,tup): 
    setattr(self, attr, val)