2011-02-17 3 views
16

まず、私はPEP 8でこれに対する答えを見つけることができませんでした。それはそれがそこにないことを意味しません。私にそれを指差すように自由に感じなさい。Pythonでは、ifブロックでのリターン後にelseを使うべきですか?

どちらのスタイルをお好みですか?

最初の1

if spam: 
    # Do stuff. 
    return eggs 
else: 
    # Maybe do other stuff. 
    return parrots 

または秒1

if spam: 
    # Do stuff. 
    return eggs 
# Maybe do other stuff. 
return parrots 
+12

@closers:私は**主観的な**を理解しますが、私は**と議論の余地がないように努力しました**。しかし、トピックからですか?コーディングスタイルの質問ですか? – nmichaels

+0

"bikeshed problem"カテゴリがあった場合は、そのような質問を閉じるよう投票します。それを欠いて、私は代わりにそれに答えるように感じた:) –

+0

私は個人的に2番目のスタイルを使用するelseブロックが長い場合。コードをもっとフラットにして読みやすくします。 –

答えて

11

オウムを返すと、卵を返さなかった場合、最初のものがより明確になります。 しかし、あなたがそのようなエラーなどをキャッチしようとしている場合は、2番目の方が良いです。

8

最初の1!

暗黙的より明示的です。

7

第2のもの!少ないほど多く、多くは良いです。

-8

私は、Pythonを知らないが、私は実行します。

return spam if eggs else parrots 

編集:私は、DOスタッフ部分に気付きませんでした。その場合、私は別のメソッドや関数(それがPythonで呼び出されているものであれ)を各ブランチに対して作成します。

+4

これはスペルです:Pythonで 'spam eggs else parrots 'を返す。 –

+10

'#do stuff'sを削除しました。加えて、あなたはPythonを知らないことについて正しいです。 – geoffspear

3

どちらもありません。

+13

幼児期のパスカルへの過度の暴露の症状:-) –

+3

@ジョンマシン:請求されたとして有罪。あまりにも多くの正式な理論。 'return'の前にロギングと正式なアサーションを追加する方が簡単です。 –

+8

私はプログラミングのOne Entry、One Exitスタイルが好きでした。あなたがあなたの方法で完了し、あなたが返す必要があるものを正確に持っているなら...戻る!私はスタックが無駄な結果変数で盛り上がると感じます。 –

4

本当に問題ではありません。コードを選択する理由が本当に必要な場合は、コードの背後にある理由を最もよく伝えるものを使用してください。両方のケースが何らかの形で類似しているか、または同等に重要である場合、最初のケース。 2番目のものは通常、オウムを返すが、卵は特殊なケースです。

5

第2のもの。同じことがreturnだけでなく、breakcontinueステートメントにも適用されます。 elseと結果として生じるくぼみは目を刺激し、空間を浪費します。

0

"do stuff"の部分に依存すると思います。 どちらでも構いません。