Python:在条件内迭代预定条件

时间:2014-10-05 14:38:08

标签: python python-2.7 loops conditional-statements

我需要遍历对象内的许多属性。每个属性都初始化为None,在程序过程中每个属性都会存储一个单独的对象。我需要迭代16个属性,条件是属性将按预定顺序存储对象。例如,如果属性10为空,则属性11到16也将为空,因此我不需要迭代任何空属性。我的初步结果是对每个属性使用'if'语句,如下所示:

Class Object1:
    def __init__(self):
        self.attribute1=None
        self.attribute2=None
        self.attribute3=None
        self.attribute4=None
        ...

    def repeating_function(self):
        if self.attribute1!=None:
            self.attribute1.attribute=Callback1
        if self.attribute2!=None:
            self.attribute2.attribute=Callback2
        if self.attribute3!=None:
            self.attribute3.attribute=Callback3
        ...

但是,由于属性存储对象的顺序,我最终得到了这个:

class Object1:
    def __init__(self):
        self.attribute1=None
        self.attribute2=None
        self.attribute3=None
        self.attribute4=None
        self.attribute5=None

    def repeating_function(self):
        if self.attribute1!=None:
            self.attribute1.attribute=Callback1
            if self.attribute2!=None:
                self.attribute2.attribute=Callback2
                if self.attribute3!=None:
                    self.attribute3.attribute=Callback3
                    ...

基本上,我的问题是:如果第二个例子在迭代非空属性时效率更高。因为我在第二个例子中添加了条件,我不确定哪种方法更有效。

1 个答案:

答案 0 :(得分:1)

您应该使用列表而不是单独的属性:

class MyClass(object):

    def __init__(self):
        self.attributes = []

有了这个,

  • 要添加属性,请使用self.attributes.append(...);
  • 要了解有多少(非None)属性,请使用len(self.attributes);
  • 引用最终的非None属性,使用self.attributes[-1];

等等。