2016-10-22 7 views
2

複数のif-elseを1行で解釈する方法は?

if x==y: 
    return 0 
else: 
    return 1 

に変換

return 0 if x==y else 1 

のような単一の行に復帰していることならば、他まあ、私は確かに私はのif-elseは次のように1行に複数の時間を発生し、これらのステートメントについて混乱しています理解

def cmp(x, y): 
    return 0 if x == y else 1 if x > y else -1 

1行で書かれたif-elseステートメントを解釈して理解する方法。

答えて

6

ようelifはしごを使用することですので、それが問題になることができます思いが分かりやすくなります。

0 if x == y else 1 if x > y else -1 

0 if x == y else (1 if x > y else -1) 
+3

それは物事がA 'のような、より複雑な式のために働く方法を示しますので、これは素晴らしい答えですとして解析しなければならない他のCOND1(Bの場合であれば、他のCOND2(C(他COND3場合D))) 'を使用してください。 –

+0

@ChronoKitsune 'できるだけ一般的には避けるべきではありますが、真実だが、私がほとんどのPythonライブラリを読むと、これらの文でいっぱいになります。 – user2728397

+2

@Rakesh_Kはい、そうです。そのような単一行if-elseステートメントの長い連鎖がある場合は、すべてのことをより明確にすることによって可読性を向上させることが通常は良い考えです。 Zen of Python( 'import this')によれば、「疎は密度の高いものよりも優れている」、「実装が説明しやすいなら、良い考えかもしれない」このようなことをもっと長くするようになると、複雑になり、「シンプルが複雑なものより優れている」、「可読性が評価される」ため、変更を検討する可能性があります。複雑な理由があることもありますので、Zenはそれを禁止しません。 –

3

明確にするためには、この

if x == y: 
    return 0 
else: 
    if x > y: 
     return 1 
    else: 
     return -1 

として見ることができ、コードはそう後で少ない可能な努力

に明確かつ理解しやすいであれば、それは素晴らしいことだ、それはどのような場合には、ネストされた場合は、他の-ですあなたが長い条件文でもう1ケースを追加したい、より良いオプションは、pを紹介この

def _comp(total): 
    if total>90: 
     return 'Python lover' 
    elif total>80 and total<=89: 
     return 'Friend of python' 
    #  elif total>50 and total<=79  added later easily 
    #   return 'you like python'  added later easily 
    else: 
     return 'python is waiting for you' 
関連する問題