對不起,首先是pythonistas,C/C++程序員必須做一些python。Python - howto保持列表中的元素類型
我正在移植一些C(而不是C++),所以我基本上想創建一個結構列表來傳遞初始化,處理並通過串口寫入設備。
我保持python非常接近C,所以當C更新時,python可能很容易得到相同的更新,所以這意味着它看起來程序化,並且我認識到的一些東西是廢話,比如創建一個數組,傳遞它初始化並接收它(我明白,我創建並通過進入的是多餘的)
我的問題是,當數組到達要處理時,我的列表recordtype已成爲一個平面列表,所以我不能再通過名稱訪問我的記錄類型的元素。
我可以將它們轉換回來(又名從列表中重新創建每個元素),但我寧願制定如何保持類型信息不變。
我已經蒸的代碼如下:
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'>
我會把它想說這是一個「增益設置」列表。
實際上有很多類似的數組,他們有像標籤這樣的常見項,處理函數應該採用任何類型的數組並使用相似的部分來完成工作。
TIA
克里斯
我會建議在這種情況下使用字典 –
爲什麼不使用'GainSettings'列表? –
感謝Peque和Brevno,最後只是一個錯字,但很微妙,感謝您的發現。 我很少必須編寫一個python程序,在這種情況下,爲了方便平臺獨立性,它應該由測試團隊來維護,它們不會超越腳本。 對不起,因爲有人提出強打字,我永遠不會愛蟒蛇:) –