Pythonのreturnによる関数の戻り値と活用方法をわかりやすく解説

スポンサーリンク
スポンサーリンク
amazon
スマイルSALE
--:--:--
ad. 価格範囲を指定して商品を探せます

returnの概要

関数の戻り値(処理結果を返す・関数を終了する) Python予約語

return

概要 return(リターン)は、関数の中で計算・処理した結果(戻り値/返り値)を、関数を呼び出した元のコードへ受け渡すためのキーワードです。また、これと同時に関数の処理をその時点で強制終了させる役割も持っています。

わかりやすく説明 return は、関数という「自動販売機」や「職人さん」から出てくる「成果物(お釣りや完成品)」です。関数に材料(引数)を渡して中で加工してもらい、最後に return を使って出来上がった答えを外に放り出してもらうことで、その答えを別の計算に使い回すことができます。

  • 関数の中で return が実行されると、関数の内部処理は残りがあってもその瞬間にすべて終了します。
  • 戻り値として、数値や文字列だけでなく、リストや辞書、複数の値をまとめて外へ返せます。
  • 何も値を指定せずに return とだけ書くか、そもそも記述を省略した場合は、自動的に None(値なし)というデータが返されます。

returnの考え方をイメージで理解

returnの基本的な使い方

2つの数値を足し算する関数を作り、その計算結果を return で外に送り出して変数に保存する例です。

# return を使って計算結果を返す
def add(a, b):
    return a + b  # 計算した答えを呼び出し元に投げる

# 関数の答え(10)が result という変数にカチッと収まります
result = add(3, 7)
print(result)  # 結果: 10
  • add(3, 7) を実行すると、関数内の return 3 + 7 が動き、10 という結果が返ります。
  • もし return がないと、せっかく計算した 10 という数字が関数の外側で利用できません。

returnによる関数の早期終了(ガード節)

return が動いた瞬間に関数は終了するため、特定の条件を満たした時点で「これ以上下の処理をさせずに切り上げる」という使い方ができます。

# 条件に応じて処理を途中で切り上げる
def check_even(number):
    if number % 2 == 0:
        return "偶数です"  # 偶数の場合はここで関数が終わり、下の行は無視されます
    
    return "奇数です"      # 奇数の場合だけここに到達します

print(check_even(4))  # 結果: 偶数です
print(check_even(7))  # 結果: 奇数です

returnを使って複数の値を同時に返す

Pythonでは、カンマ , で区切ることで、1回の return で複数の計算結果をセットにして返せます。内部的には「タプル」というデータのまとまりとして扱われます。

# 足し算、引き算、掛け算の結果を一度に返す
def calculate(a, b):
    return a + b, a - b, a * b

# 3つの変数で、それぞれの結果をバラバラに受け取ることができます
sum_val, diff_val, product_val = calculate(10, 3)
print(sum_val, diff_val, product_val)  # 結果: 13 7 30

returnを使ったデフォルト値(None)の処理

探しているデータが見つからなかったときに return None を明示して返し、受け取った側で安全に分岐処理を行う実践的なコードです。

# リストから最初の偶数を見つける関数
def find_first_even(numbers):
    for num in numbers:
        if num % 2 == 0:
            return num  # 見つかったら即終了してその数字を返す
    return None         # ループが全部回っても見つからなかった場合

result = find_first_even([1, 3, 5])

if result is None:
    print("対象の数値は見つかりませんでした。")

returnを使って再帰関数を作る

return の中で自分自身の関数をもう一度呼び出すことで、階乗の計算などをスマートに行う高度なテクニックです。

# 5の階乗 (5 * 4 * 3 * 2 * 1) を計算する再帰関数
def factorial(n):
    if n == 1:
        return 1  # 終点に達したら 1 を返して引き返す
    return n * factorial(n - 1)  # 自分の1つ前の結果を待ちながら掛け算

print(factorial(5))  # 結果: 120

returnの注意点

  • returnの下に書いたコードは「絶対に動かない幽霊コード」になる:同じブロック内で return の下に書かれたコードは、Pythonから完全に無視されます(Unreachable Code:到達不能コード)。
    # 【注意すべき例】returnの配置ミス
    def test_function():
        return "完了"
        print("この文字は絶対に画面に表示されません!") # 実行されずに無視される
  • 「print()」と「return」を混同しない:初心者が最も陥りやすい落とし穴です。print() は単に画面に文字を映し出すだけで、データの引き渡しはできません。関数の結果を別の計算や変数で使い回したいときは、画面表示ではなく必ず return を使いましょう。
    # 【失敗例】printした結果を使い回そうとする
    def bad_add(a, b):
        print(a + b) # 画面に出るだけで外には返らない
    
    total = bad_add(5, 5) # 画面に10は出るが、変数totalの中身は空っぽ(None)になる
    print(total + 5)     # None + 5 になってしまいエラー(TypeError)が発生!
  • ループの途中で意図せず関数を終了させてしまう罠for ループなどの内側でうっかり return を書くと、ループが1周目であってもその時点で関数全体がパッと終了してしまいます。リストの全要素を処理し終えてから結果を返したい場合は、return のインデント(字下げ)の位置をループの外側に合わせる必要があります。
    # 【失敗例】1周目で帰ってしまう
    def bug_loop(numbers):
        for n in numbers:
            return n * 2 # 1つ目の要素を処理した瞬間に関数ごと終了してしまう
    
    # 【正しい例】ループの外でまとめて返す
    def correct_loop(numbers):
        results = []
        for n in numbers:
            results.append(n * 2)
        return results # 全部の処理が終わったこの位置でリターンする

returnのよくある質問

Q: `return` を全く書かない関数を作った場合、その関数は何を返しているのですか?
A: Pythonは、return の記述がない、あるいは値が指定されていない関数を呼び出された場合、裏側で自動的に `return None`(値なし) を付け足して処理しています。

# 何も返さない関数
def simple_greet():
    print("ハロー")

value = simple_greet()
print(value) # 結果: None (値が何も返ってきていない証拠)
Q: 1つの関数の中に `return` は1個しか書いてはいけないというルールはありますか?
A: いいえ、何個書いても文法上は全く問題ありません。if 文の分岐に合わせて「この場合はこの値を返す、そうじゃない場合は別の値を返す」というように、複数の return を散りばめるのは実務でも一般的な書き方です。ただし、あまりに数が多すぎると「どこが関数の出口なのか」が分かりづらくなるため、多くても3〜4個程度に抑えるのが綺麗です。

まとめ

return は、関数が役割を果たした証として「答え」を外の世界へ送り届け、同時に処理の幕を閉じるための重要な制御キーワードです。

  • 関数の処理結果(戻り値)を呼び出し元へ戻し、変数に代入できるようにする。
  • return が実行された時点で、その関数の内部処理は(下にコードが残っていても)即座に終了する。
  • 何も指定しない、あるいは省略した場合は None が返り、複数並べた場合は「タプル」として返る。

関数の仕組みを理解する上で return のマスターは避けて通れません。単なる画面表示の print() との違いを完璧に意識しながら、データを受け渡す感覚を身につけましょう。