2016-08-02 48 views
0

我有一個需要的字節數arbirary寫總線Python函數:傳遞list參數要在迭代-int不迭代

def Writebytes(self,values): 
    for byte in values: 
     self.writebyte(byte) 

的想法是你通過它字節的列表,它將它們全部寫入公共汽車,例如

data=[0x10,0x33,0x14] 
object.Writebytes(data) 

我想支持單字節寫,而不[],讓你可以輸入:

data=0x00 
object.Writebytes(data) 

的宗旨,以緩解使用。但是,您無法遍歷傳遞給Writebytes的int。有沒有簡單的方法來強制輸入始終是一個列表? (最好在函數定義中..)

所有這些可迭代的東西在我第一週的Python中是新的(實際上它已經相當不錯了,因爲python的功勞)。我使用的Python3主要在RPi btw上。

非常感謝!

回答

1

您可以隨時使用try except聲明

def Writebytes(self,values): 
    try: 
     for byte in values: 
      self.writebyte(byte) 
    except TypeError: 
     self.writebyte(values) 
+0

感謝您的建議 - 這似乎是一個乾淨利落的方式。我可以看到,如你所說,它很強大。感謝偉大的建議,我們對此表示感謝。 – BrightSparkey

1

我覺得去這個最簡單的方法是:

def Writebytes(self,values): 
    if(not isinstance(values, list)): 
     values = [values] 
    for byte in values: 
     self.writebyte(byte) 
+0

對方回答好像比我更強大的,所以我會嘗試首先如果我是你 –

+1

如果輸入保證是列表或標量,那麼你的解決方案很好。但是,如果用戶傳遞任何其他類型的可迭代元素(例如元組),那麼它將失敗。我的解決方案基本上只是在假定它是一個標量之前檢查所有類型的迭代。 –

+0

是的,我意識到看到你的後 –