2011-08-13 49 views
9

什麼是更好的使用:Python:elif或new如果?

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嗎?或新的如果?或者沒關係??

編輯:好的答案..但我可以說,如果第一條語句(#do_whatever)結束與返回或休息;在那裏最後的其他條件不會被測試,從而浪費系統資源或造成麻煩,可以做任何事情..我猜...

+0

你確定在第二部分中你不是指'其他如果...'? –

+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

'酒吧(5)'返回10,而不是8 – Air

+1

@AirThomas你是對的,謝謝!經過這麼長時間你是第一個發現它的人?不錯;) –

5

如果第二個陳述是不可能的,如果第一個是真的(如在這裏就是這種情況,因爲你說var不能同時在X和Y中),那麼你應該使用elif。否則,第二次檢查仍然會運行,如果你知道它會失敗,這將浪費系統資源。

+0

沒有想到系統資源浪費..好點.. – amyassin

1

如果var不能在這兩個XY,那麼你應該使用elif。這樣,如果var in Xtrue,則不需要毫無意義地評估var in Y

+0

但它不會影響它吧? – amyassin

+1

不,但如果'Y'是一個非常大的列表,那麼如果'X中的var'爲'true',那麼通過運行一個檢查來知道您總是會返回false,從而浪費資源。 –

+0

是的,你對..沒有想到之前的問題:) – amyassin

2

如果您需要執行兩項檢查,則應該使用兩個單獨的if s。如果您想檢查一個或您的訂單,您應該始終使用elif,因爲

  • 它更有效率。如果您的第一個條件成立,您將節省資源。
  • 如果兩個條件均爲真,則可能會出現意外錯誤。

表現明智,你還應該考慮首先測試最可能的條件。

+0

+1包括所有好點 – amyassin

2

在不知道數據的情況下查看代碼,然後elif案例明確表明您的意圖,並且是首選。

這兩個if語句的情況也很難保持,因爲即使添加了註釋,仍然需要檢查它們。

+0

是的,它更難以維護時,添加命令如果代碼被展開... – amyassin

相關問題