私はまだ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]))
注:この方法で、私はわずか10にコードの20行を低減するが、実際のコード4つのセクションだけではなく、27個のセクションを持つので、目標は135行のコードを減らすことです。
アプローチ3:
代わりにタプルのタプルのデータを格納するための辞書の使用は、proccesingの時間でより効率的でしょうか?
アプローチ4:
私は各項目の代わりに、ループのための方法/機能を使用する必要がありますか?
実際の質問:パフォーマンスや可読性に影響を与えずに、そのファイルのコード行を減らす方法はありますか?どうやって?どうして?
私の即座の反応:なぜ 'variableName1'、' variableName2'などがあるのですか?それらをデータ構造体で一緒に追加します。 'variableName = [...]'は、それらを反復処理することができます。私はコードが非常に不明瞭になるので、アプローチ2には強くお勧めします。 – pingul
おそらく、あなたがこのコードを維持しようとしている唯一の人であれば、あなたが望むものは何でもできます。しかし、将来他の人がそれを維持/変更しなければならない場合、たとえそれが繰り返しであっても、それをコーディングするときに明白になる方がよいでしょう。それはcut'n'pasteとエディタのためのものです。 –
末尾の数字と異なる名前の変数がコード匂い( 'linePrecio1'、' linePrecio2'、 'linePrecio3'、' linePrecio4')です。これらのもののためにリストや辞書やオブジェクトのようなものを使う方が良いでしょう。 –