1

Noobの質問は知っていますが、これは頻繁に発生するため、確認する必要があります。elif:前のブロックが真のときにコードに到達しないことがわかっている場合、使用する意味はありますか? 例えば。

if foo:
  return x
elif bar:
  return y

次のようにする必要があります。

if foo:
  return x
if bar:
  return y
4

5 に答える 5

7

好む理由が少なくとも 3 つありますif/elif

  • 条件が相互に排他的であることを作成者が意図していたことを、コードの読者に明らかにします。
  • コードが後でリファクタリングされた場合、アーリー リターンを 1 つのレイト リターンに変更すると、 のセマンティクスはif/elif壊れませんがif/if
  • 作業している残りのコードベースと一貫性のあるコード スタイルを維持します。

および少なくとも 2 つの優先する理由if/if:

  • タイピングが少ない
  • 作業している残りのコードベースと一貫性のあるコード スタイルを維持します。

そうは言っても、ここにいくつかの推奨される読書があります:

于 2013-02-13T06:29:13.160 に答える
3

Python インタープリターとの違いはありません。実際、2 つのコード スニペットは内部的に同じ命令にコンパイルされます (コンパイラは、戻り後のコードに決して到達しないことを十分に認識しており、そのelse部分を完全に最適化します)。

それはスタイルと読みやすさの問題です。

于 2013-02-13T06:29:01.030 に答える
1

Python インタープリターの観点からは、違いはありません。少なくとも、実行に関しては違いはありませんが、2 つの構成要素の実装方法には微妙な違いがあるかもしれません。

ただし、通訳者だけに書いているわけではないことに注意してください。他のプログラマーが後でコードを読むために書いています。あなたの意図が最も明確になると思うものを何でも書いてください。

于 2013-02-13T06:29:51.047 に答える
1

それが正しくないことがわかっている場合は、それをチェックするために通訳者の時間を無駄にしないでください。使用ifすると毎回評価されます。ただし、前の条件が であったelif場合にのみ評価されます。この場合は を使用しているので、安全なはずですが、リターンに基づいて論理フローを変更することは悪いことです。コード パスはできるだけ少なくする (できれば 1 つだけにする) 必要があります。また、クリーンで読みやすい構造を提供し、コード パスを明示的にします。可読性は重要であり、明示的は暗黙的よりも優れています。ifFalsereturn

于 2013-02-13T06:31:06.480 に答える
0

複数IFのステートメントは、コードがすべてのIF条件をチェックすることを意味しますが、 のelif:場合、1 つのIF条件が満たされた場合、他の条件はチェックされません。(私に指摘されたように、これはコードブロックからのIFステートメントがない場合にのみ当てはまります)return

あなたの場合、複数IFステートメントを使用しても問題ありません。

于 2013-02-13T06:28:41.797 に答える