Python: return、return None、return なし -- 違いはありますか? 質問する

Python: return、return None、return なし -- 違いはありますか? 質問する

次の 3 つの関数について考えてみましょう。

def my_func1():
  print "Hello World"
  return None

def my_func2():
  print "Hello World"
  return

def my_func3():
  print "Hello World"

これらはすべて を返すようですNone。これらの関数の戻り値の動作に違いはありますか? どちらか一方を優先する理由はありますか?


参照:Python の関数から何も返さないことは可能ですか?

ベストアンサー1

実際の動作には違いはありません。すべて戻りNone、それで終わりです。ただし、これらすべてには適切なタイミングと場所があります。以下の手順は、基本的にさまざまな方法の使用方法 (少なくとも私が教わった使用方法) ですが、絶対的なルールではないため、必要に応じて組み合わせることができます。

使用return None

これは、関数が実際に後で使用するために値を返すことを意図していることを示していますNone。この場合は を返します。この値はNone他の場所で使用できます。return None関数から他の戻り値がない場合、 は使用されません。

次の例では、指定された が人間である場合はpersonを返します。人間でない場合は、に がないため(動物などではないと仮定します)、 を返します。motherpersonNonepersonmother

def get_mother(person):
    if is_human(person):
        return person.mother
    else:
        return None

使用return

これはループの場合と同じ理由で使用されますbreak。戻り値は重要ではなく、関数全体を終了したいだけです。頻繁に必要になるわけではありませんが、いくつかの場所では非常に便利です。

15 人いてprisoners、そのうちの 1 人がナイフを持っていることがわかっています。1 人ずつループして、prisonerナイフを持っているかどうかを確認します。ナイフで人を殴った場合は、ナイフは 1 本しかなく、 が残りの をチェックする必要がないため、関数を終了できます。ナイフを持ったprisonersが見つからない場合はprisoner、アラートを発します。これはさまざまな方法で実行でき、 を使用することはおそらく最善の方法ではありませんが、関数を終了するためにreturnを使用する方法を示す例にすぎません。return

def find_prisoner_with_knife(prisoners):
    for prisoner in prisoners:
        if "knife" in prisoner.items:
            prisoner.move_to_inquisition()
            return # no need to check rest of the prisoners nor raise an alert
    raise_alert()

注意:var = find_prisoner_with_knife()戻り値はキャッチされることを意図していないため、 は決して実行しないでください。

returnまったく使用しない

これも を返しますが、その値は使用したりキャッチしたりするためのものではありません。単に関数が正常に終了したことを意味します。基本的には、C++ や Java などの言語の関数とNone同じです。returnvoid

次の例では、人の母親の名前を設定し、正常に完了すると関数が終了します。

def set_mother(person, mother):
    if is_human(person):
        person.mother = mother

注意:var = set_mother(my_person, my_mother)戻り値はキャッチされることを意図していないため、 は決して実行しないでください。

おすすめ記事