2011-08-13 2 views
9

使用することをお勧めは何ですか:Python:elifまたはnew if?

if var in X: 
    #do_whatever 
elif (var in Y): 
    #do_whatever2 

か:

if var in X: 
    #do_whatever 
if var in Y: 
    #do_whatever2 

varはXとYの両方にすることはできませんと仮定すると...任意のルールや慣行はありますか? elifを使うべきですか?新しいif?またはそれは問題ではない??

EDIT:大きな回答..しかし、最初のステートメント(#do_whatever)がリターンまたはブレークで終わっても、どこかで他の条件がテストされず、システムリソースを浪費したり、トラブルを引き起こしたりすることはありません。何とかしても大丈夫です。

+0

2番目の部分では、あなたは「else if ...」を意味していませんか? –

+2

それは私の質問です – amyassin

答えて

15

場合によっては違いがあります。 この例を参照してください:

def foo(var): 
    if var == 5: 
     var = 6 
    elif var == 6: 
     var = 8 
    else: 
     var = 10 

    return var 

def bar(var): 
    if var == 5: 
     var = 6 
    if var == 6: 
     var = 8 
    if var not in (5, 6): 
     var = 10 

    return var 

print foo(5)  # 6 
print bar(5)  # 10 
+0

とそれは考慮すべき大きなポイントです... – amyassin

+0

'bar(5)'は10を返す、8ではない – Air

+1

@AirThomas !そんなに長い時間が過ぎると、あなたはそれを見つけ出す最初の人ですか?いいです;) –

5

最初のものが真あなたがvarがXとYの両方にあることはできないと言ったので、ここではそうです)、elifを使用する必要があります。そうしないと、2番目のチェックがまだ実行されます。これは、システムリソースが偽になることがわかっている場合は、システムリソースの無駄です。

+0

システムリソースの無駄を考えることはありませんでした..良い点.. – amyassin

1

varXYの両方にすることはできません場合は、あなたがelifを使用する必要があります。このように、var in Xtrueの場合、無駄に評価する必要はありませんvar in Y

+0

しかしそれはそれに影響しませんか? – amyassin

+1

いいえ、 'Y'が非常に大きなリストであれば' var in X'が 'true'なら常にfalseを返すというチェックを実行してリソースを無駄にするでしょう。 –

+0

ええええええええええええええええええええええええええええん: – amyassin

2

両方のチェックを実行する必要がある場合は、2つの別々のifを使用する必要があります。 1つまたは注文を確認する場合は、elifを常に使用する必要があります。

  • これはより効率的です。最初の条件が真であれば、リソースを節約します。
  • 両方の条件に当てはまる場合、予期しないエラーが発生する可能性があります。

パフォーマンス面では、まず最も可能性の高い条件をテストすることを検討する必要があります。

+0

+1すべての良い点が含まれています – amyassin

2

データを知らないコードを見ると、elifの場合は明示的にあなたの意図が述べられており、これが優先されます。

2つのif文の場合も、コメントが追加されても維持するのが難しくなりますが、それでも確認する必要があります。

+0

はい、コードが展開されている場合は、コマンドを追加すると、維持するのが難しくなります... – amyassin

関連する問題