2014-10-05 41 views
1

我需要迭代對象內的多個屬性。每個屬性都初始化爲None,並且在程序過程中每個屬性都會存儲一個單獨的對象。我需要迭代16個屬性,條件是屬性將按預定順序存儲對象。例如,如果屬性10爲空,則屬性11到16也將爲空,因此我不需要遍歷任何空屬性。我最初的結果是使用「如果」每個語句屬性是這樣的:Python:在條件內對預定條件進行迭代

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 
        ... 

基本上,我的問題是:如果第二個例子在迭代非空屬性時效率更高。因爲我在第二個示例中添加了條件,所以我不確定哪種方法更高效。

+2

如果用「高效」來表示速度,那麼就忘了它。想想你要花多長時間來編寫,閱讀或維護這樣的代碼。想出一個方法來做一個列表或字典,並忘記微秒。 – alexis 2014-10-05 14:40:07

+1

我很確定你想要一個'list','dict',甚至是一個單獨的類而不是16個單一的屬性。代碼會變得糟糕。 – tamasgal 2014-10-05 14:40:10

+3

Btw .:不成熟的優化是一切罪惡的根源。 – tamasgal 2014-10-05 14:40:43

回答

1

你應該使用一個列表,而不是單獨的屬性:

class MyClass(object): 

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

有了這個,

  • 添加屬性,使用self.attributes.append(...);
  • 找出有多少(非None)屬性,使用len(self.attributes);
  • 參照最終的非None屬性,使用self.attributes[-1];

等等。