5

[編集]をに変更return 0しましたreturn。Pythonn00bであることの副作用。:)

私は関数を定義しています。ここでは、約20行の処理を行っています。処理する前に、特定の条件が満たされているかどうかを確認する必要があります。もしそうなら、私はすべての処理をバイパスする必要があります。このように関数を定義しました。

def test_funciton(self,inputs):
    if inputs == 0:
        <Display Message box>
        return
    <20 line logic here>

20行のロジックは値を返さず、最初の'if'で返された0を使用していないことに注意してください。

上記の方法はインデントが1つ少ないので、以下のタイプのコードを使用するよりも優れているかどうかを知りたいです(パフォーマンス、読みやすさ、またはその他の点で)。

def test_function(self,inputs):
    if inputs == 0:
        <Display Message box>
    else:
        <20 line logic here>
4

5 に答える 5

3

一般に、コードの可読性が向上し、障害状態をできるだけ早く処理できるようになります。そうすれば、コードの本質はこれらについて心配する必要がなくなり、コードの読者はもはやそれらを考慮する必要がなくなります。多くの場合、例外を提起しますが、本当に何もしたくないのであれば、一般的に「単一の出口点」スタイルに固執しても、それは大きな問題ではないと思います。

しかし、値を使用していないのに、なぜreturn 0だけではなく、なぜですか?return

于 2012-06-25T17:24:46.553 に答える
2

inputsこの文脈では、なぜゼロになれないのかを知ることが重要だと思います。通常、ほとんどのプログラムがこれを処理する方法は、悪い値が渡された場合に例外を発生させることだと思います。次に、呼び出し元のルーチンで例外を処理(または処理しない)できます。

「飛躍する前に見てください」ではなく、「許しを求めるほうがよい」と書かれていることがよくあります。もちろん、関数に0を渡すことが多い場合は、try/except句のコストが高くなる可能性があります(try安価ですが、そうでexceptはありません)。

「飛躍する前に見る」ことに設定されている場合は、おそらく最初のフォームを使用してインデントを抑えます。

于 2012-06-25T17:24:56.700 に答える
2

まず、return後で何もせずに使用できます。強制する必要はありませんreturn 0

パフォーマンスの面では、この質問はあなたが違いに気付かないことを証明しているようです(あなたが本当に不運な場合を除いて;))

于 2012-06-25T17:25:12.153 に答える
1

どちらの場合も、パフォーマンスが大幅に異なるとは思えません。あなたのように、私は読みやすさのための最初の方法にもっと傾く傾向があります。

小さいインデント(IMOはそれほど重要ではありません)に加えて、入力== 0の場合は、さらに読む必要がありません。2番目の方法では、if/elseステートメントの後に追加の処理があると想定できます。 、一方、最初のものは、メソッドがその条件で完了していることを明らかにします。

それは実際には個人的な好みに帰着しますが、実際には両方の方法が使用されていることがわかります。

于 2012-06-25T17:24:29.930 に答える
1

この場合、 2番目の例returnでは、メッセージボックスが表示されます。

私の意見では、読みやすさにつながるので、「早く戻る」ことを好みます。しかし、繰り返しになりますが、関数が実際に終了する前に発生する私のリターンのほとんどは、特定の条件が満たされない場合、アプリケーションロジックの短絡に関連する傾向があります。

于 2012-06-25T17:24:59.937 に答える