まずpythonistasに、C/C++プログラマーがいくつかのPythonを行う必要があります。Python - リスト内の要素の型を保持しています
私はいくつかのC(C++ではない)を移植していますので、シリアルポート経由でデバイスに初期化、処理、書き込みを行うための構造体のリストを作成します。
私はPythonをCに非常に近づけているので、Cが更新されるとPythonは簡単に同じ更新を得るかもしれないので、手続き的に見えますし、配列の作成、それを渡して初期化して戻します(私が作成して渡すものは冗長であることを理解しています)
私の問題は、配列が処理されるようになるとレコードリストがフラットリスト、私はもはや自分のレコードタイプの要素に名前でアクセスすることはできません。
私はそれらを元に戻すことができます(リストから各要素を作り直すことができます)。しかし、タイプ情報をそのまま維持する方法を検討したいと思います。
私は、次のコードを蒸留している:
GainSettings = recordtype('GainSettings', 'label value')
def init_arrays(Gains):
labels = [ "Gain_1:", "Gain_2:", "Gain_48:" ]
for itr in range(3):
value = []
value.extend([0] * CHANNELS)
label = labels[itr]
entry = GainSettings(label, value)
Gains.extend(entry)
return True, Gains
def process_array(Gains):
thing = Gains[0].label # dies here with AttributeError: 'str' object has no attribute 'label'
thing += "wibble"
Gains[0].label = thing
return True, Gains
def main(args):
# char* label;
# sint16 value[CHANNELS];
Gains = [] # will be array of gain settings
ret, Gain = init_arrays(Gains)
ret, Gains = process_array(Gains)
私はそれはので、私は、配列を確認することができます失敗したブレークポイントを持っている、これは私に語った:
>>> print type(Gains)
<type 'list'>
>>> print Gains
['Gain_1:', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Gain_2:', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'Gain_48:', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
<type 'list'>
>>> print type(Gains[0])
<type 'str'>
>>> print type(Gains[1])
<type 'list'>
私はそれを希望それが "GainSettings"のリストであると言う。
実際には、ラベルのような共通の項目があり、処理関数はどのような種類の配列をとっていても同様の部分を使って処理を行うことになっています。
TIA
クリス
この場合は辞書を使うことをお勧めします –
なぜ 'GainSettings'のリストを使ってみませんか? –
PequeとBrevnoのおかげで、最後はちょっとタイプミスでしたが、微妙でした。 Pythonプログラムを書く必要はほとんどありません。この場合、プラットフォームの独立性を確保するために、テストチームに任せてスクリプトを書くよりもはるかに上手く行かなくてはなりません。 申し訳ありませんが、誰かが強く入力することで育ったので、決してPythonを好きにならないでしょう:) –