2016-08-02 5 views
0

私はバスにバイトのarbirary数を書き込む必要があるのpythonの機能があります。渡しlist引数ではない反復可能

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を反復処理することはできません。入力を常にリストに強制する簡単な方法はありますか? (好ましくは関数定義で..)

このすべてのiterablesのものは、Pythonの最初の1週間で私にとって新しくなりました。私は主にRPi btwでPython3を使用しています。

多くの感謝!

答えて

1

あなたは常に他の答えは私のものよりも堅牢に見えるので、私はそれをしようと

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

try exceptステートメントを使用することができます最初は私があなたの場合 –

+1

入力がリストまたはスカラーのいずれかであることが保証されていれば、あなたの解答は問題ありません。しかし、ユーザーが他のタイプの繰り返し可能なもの(例えばタプル)を渡すと失敗します。私の解決策は、基本的にすべてのタイプのiterablesがスカラであると仮定する前にチェックするだけです。 –

+0

ええ、私はあなたのことを見てそれを実現しました –

関連する問題