我仍然在學習的Python(3.5),我有這段代碼它需要很多的值賦給一些對象,所以我想知道什麼是最優化的方式做它。我這樣問是因爲我缺乏瞭解循環中「少量代碼」是否比不使用循環要求更高的時間要求(文件大小較小,但是處理速度增加了......也許會?),因此缺乏這方面的知識。 。減少代碼行,而不會影響性能
方法1:
# 01
self.lineReferencia1.setText(utilidades.ensure_its_str(registro[16]))
self.lineConcepto1.setText(utilidades.ensure_its_str(registro[17]))
self.lineCantidad1.setText(utilidades.ensure_its_str(registro[18]))
self.linePrecio1.setText(utilidades.ensure_its_str(registro[19]))
self.lineDescuento1.setText(utilidades.ensure_its_str(registro[20]))
# 02
self.lineReferencia2.setText(utilidades.ensure_its_str(registro[23]))
self.lineConcepto2.setText(utilidades.ensure_its_str(registro[24]))
self.lineCantidad2.setText(utilidades.ensure_its_str(registro[25]))
self.linePrecio2.setText(utilidades.ensure_its_str(registro[26]))
self.lineDescuento2.setText(utilidades.ensure_its_str(registro[27]))
# 03
self.lineReferencia3.setText(utilidades.ensure_its_str(registro[30]))
self.lineConcepto3.setText(utilidades.ensure_its_str(registro[31]))
self.lineCantidad3.setText(utilidades.ensure_its_str(registro[32]))
self.linePrecio3.setText(utilidades.ensure_its_str(registro[33]))
self.lineDescuento3.setText(utilidades.ensure_its_str(registro[34]))
# 04
self.lineReferencia4.setText(utilidades.ensure_its_str(registro[37]))
self.lineConcepto4.setText(utilidades.ensure_its_str(registro[38]))
self.lineCantidad4.setText(utilidades.ensure_its_str(registro[39]))
self.linePrecio4.setText(utilidades.ensure_its_str(registro[40]))
self.lineDescuento4.setText(utilidades.ensure_its_str(registro[41]))
方法2:
items = (
(self.lineReferencia1, registro[16]), (self.lineConcepto1, registro[17]), (self.lineCantidad1, registro[18]),
(self.linePrecio1, registro[19]), (self.lineDescuento1, registro[20]), (self.lineReferencia2, registro[23]),
(self.lineConcepto2, registro[24]), (self.lineCantidad2, registro[25]), (self.linePrecio2, registro[26]),
(self.lineDescuento2, registro[27]), (self.lineReferencia3, registro[30]), (self.lineConcepto3, registro[31]),
(self.lineCantidad3, registro[32]), (self.linePrecio3, registro[33]), (self.lineDescuento3, registro[34]),
(self.lineReferencia4, registro[37]), (self.lineConcepto4, registro[38]), (self.lineCantidad4, registro[39]),
(self.linePrecio4, registro[40]), (self.lineDescuento4, registro[41]))
for i in items:
i[0].setText(utilidades.ensure_its_str(i[1]))
注:採用這種方法,我減少20行代碼到只有10,但真正的代碼不只有4個部分,它有27個,所以目標是減少135行代碼。
方法3:
會使用字典來存儲,而不是一個元組的元組數據,會更有效的proccesing的時間?
方法4:
我應該使用方法/函數對每個項目,而不是一個循環?
真正的問題:有沒有其他方法可以減少該文件上的代碼行而不會影響性能或可讀性?怎麼樣?爲什麼?
我的直接反應是:爲什麼要有'variableName1','variableName2'等?把它們加在一個數據結構中,'variableName = [...]',這樣你就可以迭代它們。我強烈建議不採用方法2,因爲代碼變得非常模糊。 – pingul
可以說,如果你是唯一一個要維護這段代碼的人,你幾乎可以做任何你想做的事情。但是,如果其他人將來不得不保持/改變它,那麼編碼時最好是明確的,即使這是重複的。這就是cut'n'paste和編輯們的目的。 –
具有相同名稱的變量與結尾數字不同的是代碼異味('linePrecio1','linePrecio2','linePrecio3','linePrecio4')。對於這些東西,最好使用類似列表或字典或對象的東西。 –