2017-06-20 10 views
0

私はコードをもっとコンパクトにしようとしています。きれいに減らすことができる部分があるとは思いますが、それをどうやって行うかはわかりません。私は速くそれを見つけるためにあなたのために下にコピーされたコードの中にコメントを入れました。このpython関数を合成する方法

コードは、次のいずれかです。

def change_to_mop_gen(infile, namedir="",charge=0, gnorm=None, separate=True, hamiltonian="PM6", calctype="opt", multiplicity="singlet", eps=None, cycles=None): 
#armado de la salida 
    if calctype=="thermo(298,298,0)": 
     calctype1="thermo" 
    else: 
     calctype1=calctype 
    outfile=infile.split(".")[0] + "-" + calctype1 + "-" + hamiltonian 

#~ here comes the set of if/else sentences i think could be reduced 

    if gnorm !=None: 
     gnorm="gnorm=" + str(gnorm) 
    else: 
     gnorm= " " 
    if cycles!=None: 
     cycles="cycles="+str(cycles) 
    else: 
     cycles="" 
    if separate==True: 
     outfile=outfile + "_*.mop" 
    else: 
     outfile=outfile + ".mop" 
    if eps !=None: 
     eps="eps=" + str(eps) 
    else: 
     eps = "" 

    #~here it ends 

    keywords = "-xk '%s %s %s %s %s %s charge=%i'"%(cycles, hamiltonian, calctype, multiplicity, eps, gnorm, charge) 
    #change directory of outfile 
    if namedir!="": 
     outfile= namedir + "/" + outfile 
    return change_format(infile,outfile, keywords) 

すべてのヘルプは良いでしょう。

+0

私はあなたがtex.stackexchangeではなく、stackoverflowになりたいと思います。また、 '' gnormがNoneであれば ''なし ''を使用してください。 – percusse

+1

'' gnorm = "" gnormがNoneならば "gnorm =" + str(gnorm) ' – percusse

+0

@percusseはい、ごめんなさい – HernanProust

答えて

1

私はクリーンアップとここにコードを修正:

gnorm= ("gnorm=" + str(gnorm)) if gnorm is not None else "" 
cycles="cycles="+str(cycles) if cycles is not None else "" 
outfile=(outfile + "_*.mop") if separate else (outfile + ".mop") 
eps=("eps=" + str(eps)) if eps is not None else "" 

これは、あなたのメソッドの速記を書く方法です。また、ブール値が真であることを評価するべきではありません。ブール値自体は条件です。また、評価が等しくないかどうかは同じです。

+0

しかし、それはまさに私が尋ねたものではありません。私は再定式化する:すべての 'if'と' else else'を一度入れる方法はありますか? gnorm、cycles、epsの各行は似ています。 – HernanProust

+0

個別に評価される別々の変数であることを考慮すると、それらをすべて1つに凝縮するのは実際には意味がありません。見た目が煩雑にならないようにするには、変数を送信してその評価を行う方法を作ることができますが、それはコードの1行であることを考慮すると、私はそれをアドバイスしません。 – JoshKopen

+0

私はそれを得る、良い.. – HernanProust

関連する問題