2016-11-08 11 views
3

私は初心者のプログラマーであり、Pythonを使用しています。私は多くの条件を持っていますが、それらのうちの1つが真実であるとすぐに、私は関数を殺してブール値を返したいと思います。 は、我々が持っている、と言う:複数のリターンとPythonの戻り変数

a) 
def foo(): 
    if condition1: 
     return True 
    if condition2: 
     return True 
    if condition3: 
     return True 
    return False 

b) 
def foo(): 
    bar = False 
    if condition1: 
     bar = True 
    elif condition2: 
     bar = True 
    elif condition3: 
     bar = True 
    return bar 

は別のものより1ずっといいですか?どうして?または、これはいくつかの完全なジャンクであり、完全に異なる方法で実装する必要がありますか?他の言語ではPythonとは異なるのですか(あるいは、Python的な方法がありますか?) ご回答いただきありがとうございます。 ところで、ベストプラクティスのタグなどがありますか?

+2

私はこれは、Pythonに固有の疑い、および「早期復帰」を検索するときに見つけるたくさんあります。早期返品がどの程度明確であるか隠されているかなど、状況に固有のものでもあります。あなたのケースでは、 'if condition1 or condition2 or condition3:Trueを返します。 「Falseを返す」はさらにはっきりするかもしれません。 – Evert

+1

どちらも問題ありません。あなたはあなたのケースでもっと読みやすいものを使うべきです。 – zvone

+0

長い関数では、1回のリターンで読みやすくなります。しかし、おそらく、それらの長い関数を破ることは、とにかく良いアイデアです。 –

答えて

5

最初のバージョンは私の意見では、よりPython的である、それはかかわらず、代わりにこのように書くことができます参照してください。それ。

その他の方法:

def f(): 
    return condition1 or condition2 or condition3 

def f2(): 
    return any([condition1, condition2, condition3]) 
+2

条件が「bool」ではない可能性がある場合は、結果をキャストする方がよいでしょう: 'return bool(condition1 or condition2 or condition3)'。 –

+2

@ MarkRansom 'return any((condition1、condition2、condition3))' –

+0

この場合、condition1がチェックされます。 trueの場合、即時にtrueを返しますか、それとも他の条件でもチェックが必要ですか?私はCが速い評価のようなものを持っていると信じています。 –

2

a.)b.)の両方が有効です。 Cのようなリソース管理やデバッグのために、1か所でしか壊れたくない言語の場合、設定はb.)です。 https://softwareengineering.stackexchange.com/questions/118703/where-did-the-notion-of-one-return-only-come-fromを参照してください。 Pythonや他の言語の場合は、いずれかを使用することが標準です。

return condition1 or condition2 or condition3 
+0

あなたは私のためにこれを詳しく説明できますか?これを見る方法はありますか?それは 'return'で返されました。' if/elif'の場合に 'bar = True'が発生したケースはどうでしたか? – roganjosh

+3

@roganjoshどの条件に該当するかはわかりません。しかし、関数が戻る前にブレークポイントを設定したり、printステートメントを追加する場合は、1つの場所に置くだけで済みます。 – Barmar

+0

@Barmar実際、その点が分かります。公正、ありがとう。 – roganjosh