2011-03-25 61 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)