Noob問題我知道,但我需要它確認,因爲這經常發生在我身上。如果您知道在上一個模塊爲真時無法訪問代碼,請問使用elif:
有什麼意義嗎?例如。如果返回練習
if foo:
return x
elif bar:
return y
應該僅僅是:
if foo:
return x
if bar:
return y
Noob問題我知道,但我需要它確認,因爲這經常發生在我身上。如果您知道在上一個模塊爲真時無法訪問代碼,請問使用elif:
有什麼意義嗎?例如。如果返回練習
if foo:
return x
elif bar:
return y
應該僅僅是:
if foo:
return x
if bar:
return y
我可以看到至少有三個原因偏愛if/elif
:
if/elif
語義不會打破,但if/if
威力,並至少有兩個原因喜歡if/if
:
那說,下面是一些推薦閱讀:
添加到第一點,'顯式優於隱式' - 第2行,[* The Zen of Python *](http://www.python.org/dev/peps/pep-0020/) – Volatility 2013-02-13 06:34:27
@Volatility我覺得'return'語句非常明確。 – 2013-02-13 06:43:51
@JanneKarila我在說''互斥'部分';)' – Volatility 2013-02-13 06:45:50
多IF
聲明意味着你的代碼將檢查所有IF
條件,而在elif:
情況下,如果一個IF
條件滿足就不會檢查其他條件。 (正如已經向我指出,這是唯一真正的,如果沒有IF
語句從代碼塊具有return
)
在你的情況下,它是確定使用多IF
聲明。
我不認爲這是必然的。如果函數返回的時間太早,解釋器不應該到達下一個if。 – 2013-02-13 06:29:20
函數*具有*從代碼塊返回的多個'if'語句完全不會影響解釋器。 – 2013-02-13 06:30:34
是的,我明白你的觀點。讓我編輯我的答案。 – Frankline 2013-02-13 06:32:13
python解釋器沒有任何區別;實際上,這兩個代碼片段將在內部編譯爲相同的指令(編譯器足夠聰明,知道返回後的代碼永遠不會到達,並且將完全優化else
部分)。
這是一個風格和可讀性的問題。
從Python解釋的觀點來看,沒有,沒有差異 - 或者至少有一個在執行方面沒有差別,儘管這兩種結構的實施方式可能會有一些細微的差異。
但請記住,你正在寫的不僅僅是口譯員;你正在爲其他程序員寫信以後再閱讀你的代碼。寫出你認爲使你的意圖最清楚的內容。
如果你知道它不會是真的,那麼不要浪費解釋者的時間來檢查它。如果您使用if
,則會每次評估一次;然而,elif
只有在前面的if
條件爲False
時纔會被評估。在這種情況下,您正在使用return
,所以您應該從此安全,但通過根據回報更改邏輯流程是不好的。您應該儘可能少(最好只有一個)代碼路徑。此外,它提供了一個乾淨可讀的結構,並使代碼路徑清晰。可讀性計數,顯式優於隱式。
我沒有看到在這種情況下需要使用elif,但styleguides可能會說不然。 – Gjordis 2013-02-13 06:28:20