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
好む理由が少なくとも 3 つありますif/elif
。
if/elif
壊れませんがif/if
、および少なくとも 2 つの優先する理由if/if
:
そうは言っても、ここにいくつかの推奨される読書があります:
Python インタープリターとの違いはありません。実際、2 つのコード スニペットは内部的に同じ命令にコンパイルされます (コンパイラは、戻り後のコードに決して到達しないことを十分に認識しており、そのelse
部分を完全に最適化します)。
それはスタイルと読みやすさの問題です。
Python インタープリターの観点からは、違いはありません。少なくとも、実行に関しては違いはありませんが、2 つの構成要素の実装方法には微妙な違いがあるかもしれません。
ただし、通訳者だけに書いているわけではないことに注意してください。他のプログラマーが後でコードを読むために書いています。あなたの意図が最も明確になると思うものを何でも書いてください。
それが正しくないことがわかっている場合は、それをチェックするために通訳者の時間を無駄にしないでください。使用if
すると毎回評価されます。ただし、前の条件が であったelif
場合にのみ評価されます。この場合は を使用しているので、安全なはずですが、リターンに基づいて論理フローを変更することは悪いことです。コード パスはできるだけ少なくする (できれば 1 つだけにする) 必要があります。また、クリーンで読みやすい構造を提供し、コード パスを明示的にします。可読性は重要であり、明示的は暗黙的よりも優れています。if
False
return
複数IF
のステートメントは、コードがすべてのIF
条件をチェックすることを意味しますが、 のelif:
場合、1 つのIF
条件が満たされた場合、他の条件はチェックされません。(私に指摘されたように、これはコードブロックからのIF
ステートメントがない場合にのみ当てはまります)return
あなたの場合、複数IF
ステートメントを使用しても問題ありません。