2016-08-02 80 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

是的,我意识到看到你的后 –