帮助清理一些Python代码

时间:2011-03-25 00:29:45

标签: python variables tuples

下面我有一些代码根据元组 tup 中的值来分配值。 现在这段代码对我的口味来说太重复了,我希望能够使用循环。

段:

    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]

根据我的理解,if语句会给解压元组的想法带来麻烦。有什么建议?

3 个答案:

答案 0 :(得分:5)

试试这个:

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

它被称为解包元组。

答案 1 :(得分: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)

答案 2 :(得分:0)

这是一个漫长的过程,但为了比较:

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