2017-05-04 17 views
1

は、私がこのようなプログラムを持っていると言う条件に固有の変数を定義することです(パイソンが、それは、アルゴリズムの質問です):は、それは良い練習が

if boolean == true: 
    commonvar = process1() 
    var = "foo" 
else: 
    commonvar = process2() 
    var = "bar" 
result = intermediate_process (commonvar) 
if boolean == true: 
    print ("training of {} :{}".format (var, result) 
else : 
    print ("testing of {} :{}".format (var, result) 

が代わりに言うでVARを変更するには、それが正しい/良いデザインの実践です:

if boolean == true: 
    commonvar = process1() 
    var_true = "foo" 
else: 
    commonvar = process2() 
    var_false = "bar" 
result = intermediate_process (commonvar) 
if boolean == true: 
    print ("training of {} :{}".format (var_true, result) 
else : 
    print ("testing of {} :{}".format (var_false, result) 

私はこれの一つの利点は、既存のに条件を追加するときに、特に実質的に(アルゴリズムである「パス」には、VARに属し、新しい変数名がより適切かもしれない簡単に見ることができるということだと思います元の変数名 "var"が意味を持つ場合のアルゴリズムアルゴリズムの元のパスに関連しており、新しいアルゴリズムでは同じパスになる可能性がありますが、セカンダリの追加パスには意味がありません。
私は、定義されていない1つの名前への参照を作成すると、実行中にコンパイラまたはプログラムが例外をスローするため、バグをより簡単に作成できると思います。つまり、パスを変数にマッチさせるほうが簡単であるため、これは利点と見ることもできます。

あなたはどう思いますか?確かに命名規則は良いデザインと一緒に定義されていますが、私はその質問がそれよりも大きいと思うので、特にpythonベースではありません(私は単にプログラミング/英語を理解する人のために読めるからです)。

+0

'if boolean == True'の代わりに' if boolean'を使用します。 –

答えて

1

。より高度なケースでは、そのような簡単な1ライナーに減らすことはできませんが、具体的な例がないと、「ベストプラクティス」が何であるかを議論することは困難です。私は自分の頭の上から出てくるものを考えることはできません。プレースホルダーの名前(中間合計など)や、あまりにも多くの変数を追加することで明瞭さが失われることはすぐには分かりません。

+0

実際に私は状況にあった固有コードの代わりに "intermediate_process"を書きましたが、実際にこの関数を便利に使うことができると私は気づきました。コードをもっとずらしてしまうので役に立たないと捨てましたもっと。 –

+2

ようこそ。^_ ^私の経験では、可読性のためにコードを最適化することは、常に正しい答えを1つだけ持つものではなく、異なる分野の人々は異なる慣習とスタイルを持っています。しかし、あなたのコードを物語のように考えるならば、人々が頭の中で同時にいくつかの変数を持つことができるということを心に留めておくと、人間の直感はアクセス可能なコードを書くための長い道のりになります。 – Evey

1

最初の例は、変数を定義するより良い方法だと思います。デバッグは簡単ですし、if/else節で設定されているので、それが共通の変数であることがより理にかなっています。

宣言する変数の数が多いほど、この特定の問題は1つの変数で処理できるため、最初の設計が成功します。バグについての部分は、定義していないために忍び寄っています[これは悪いコードの原則です]あなたのアルゴリズムに合った値に変数を初期化し、何かを意味するfooまたはbarに一致しない場合、他にあなたのコードがあります。私はそれが大きな明確だし、それ以前のコードで定義された奇数の変数を覚えておく必要はありませんだと思う

print(f"training of foo :{intermediate_process(process1())}" if boolean else 
     f"testing of bar :{intermediate_process(process2())}") 

:何について

+0

これらはすべて有効な点です。ありがとうございます。 –

関連する問題