【Python】returnとreturn Noneどちらを使うべきか
return文で関数処理を終了したい場合はreturn None
とreturn
どちらを使うべきか?
Pythonの関数を書いていたときにふと疑問に感じたことが。
それは関数の途中で処理を終了したい場合に、return
と書くべきなのかreturn None
と書くべきなのかという問題。
Pythonでは明示的に書くことが推奨されているため、return文で処理を終了するときもNone
を返すときもreturn None
と書くべきなのかなぁと迷いました。(※Pythonでは、関数定義でreturn
だけ書いた場合、あるいはreturn
の記述が無い場合はNone
が返ってきます。参考:【Python】returnを記述しなかった関数が返す値)
結論からいうと関数を終了したいだけのときはreturn
だけの方が良いようです。
ただし、return
だけ書くときはいくつか注意すべきことがあるようです。
例をあげてみる
return, return None, and no return at all? が参考になりました。例をあげて説明してみます。
return None
を使う
def hello_all():
persons = ['Zepp', 'Eric']
if persons:
for person in persons:
print('Hello ' + person)
# リストが空だったらNoneを返す
else:
return None
return
を使う
戻り値のNoneを使いたい場合に明示的にreturn None
と書くといいましたが、戻り値を使うのではなく関数を終了したい場合にはreturn
を使ってもOKです。下のコードではforループを抜けて関数を終了させるために使っています。
def hello_zepp():
persons = ['Zepp', 'Eric']
for person in persons:
print('Hello ' + person)
# 処理を終了
return
つまりforループが一重の場合にはbreak
と同じ働きをします。
多重forループでネストされたforループ内で処理を終了したい場合はbreak
と異なってreturn
を一つ書くだけで関数を終了できるので、コードが簡潔になります。
このようにreturn
を使う場合はループを抜ける場合など、強制的に関数の途中で処理を終了したい場合に使います。
注意すること
この場合、戻り値のNone
は使うことが想定されていないため、戻り値を変数に代入するようなことはしてはいけません。
# ↓はやってはダメ
result = hello_zepp()
また、関数を途中で終了したい場合には、条件に合わずに処理を中断したい場合も含まれると思います。そのような場合はreturn
を使うよりも、適切な例外クラスを作って例外をなげて、呼び出し元で例外処理をした方がよいでしょう。
return
の記述なし
Pythonの関数はreturn文を必ずしも必要としませんが、return文が無い場合でも戻り値としてNone
が返ってくるようになっています。
# return文は無いが戻り値としてNoneが返される
def hello_eric():
persons = ['Zepp', 'Eric']
print('Hello ' + persons[1])
この場合もreturn None
の場合と同じでこのNone
は使うことが想定されていないため、戻り値を変数に代入するようなことはしてはいけません。
結論
- 関数処理を中断したいだけのときは
return
を使う方がベター。 - 戻り値の
None
を利用する場合はreturn None
を使う。 - 多重ループを一気に抜けるときは
return
は便利かも。 -
return
やreturn文なしの戻り値None
は使わない。
Author And Source
この問題について(【Python】returnとreturn Noneどちらを使うべきか), 我々は、より多くの情報をここで見つけました https://qiita.com/_masa_u/items/b623ff04ddf24f77fd2c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .