関数からreturn文を使って呼び出し元へ戻り値を返す

関数が呼び出されたあと return 文を使用することで関数の呼び出し元へ値を返すことができます。ここでは関数から呼び出し元へ戻り値を返す方法について解説します。

(Last modified: )

return文を使って戻り値を返す

関数を呼び出すと、関数のブロック内の処理が上から順に行われ、ブロックの最後まで達すると関数内での処理は終了し、呼び出しもとに処理が戻ります。この時、関数からは呼び出し元へ None という値が返されます。

次の例を見てください。

def myfunc():
    print("Hello")

x = myfunc()
>> Hello

print(x)
>> None

関数を呼び出したあと、関数から戻ってきた値を変数 x に代入し画面に出力しています。明示的に関数から戻す値を指定しない場合はこのように None という値が返されます。

関数から関数の呼び出し元へ任意の値を返す場合には return 文を使用します。

return 戻り値

関数内で return 文が実行されるとそこで関数内での処理はは終了し、関数の呼び出しもとに処理が戻ります。この時 return 文のあとに戻り値が記載されていた場合は、この値が呼び出し元に戻ります。

サンプルコード

次のサンプルを見てください。

def myfunc():
    print("Hello")
    return "Good bye"

x = myfunc()
>> Hello

print(x)
>> Good bye

関数を呼び出したあと、関数から戻ってきた値を変数 x に代入し画面に出力しています。関数の中で return 文を使って "Good bye" という文字列を戻り値として返しています。

return 文は関数の最後だけではなく、関数のブロック内の任意の場所に記述できます。どこに記述されていても return 文が実行されると関数内での処理はそこで終了となります。また return 文は複数記述することができます。関数内で条件分岐を記述し、条件に応じて異なる戻り値を呼び出し元に返すこともできます。

サンプルコード

次のサンプルを見てください。

def myfunc(num):
    if num % 2 == 0:
        return "偶数です"
    return "奇数です"

for i in range(1, 5):
    print(str(i) + "は" + myfunc(i))

>> 1は奇数です
>> 2は偶数です
>> 3は奇数です
>> 4は偶数です

今回のサンプルでは for 文を使って関数に渡す引数の値を変化させ、関数内では渡されてきた値に応じて複数の return 文を使って呼び出しもとに返す値を変えています。

複数の値を戻り値として返す

return 文の後に記述できる戻り値は 1 つだけですが、複数の値を要素として持つタプルなどのオブジェクトを作成し戻り値として設定することで複数の値を実質的に関数の呼び出しもとに返すことができます。

次の例を見てください。

def myfunc():
    name = "Yamada"
    old = 24
    return (name, old)

x = myfunc()
print("name : " + x[0])
>> name : Yamada

print("old : " + str(x[1]))
>> old : 24

関数内で 2 つの引数の値を使ってタプルのオブジェクトを作成し、 return 文の戻り値として設定しています。関数を呼び出したあとで、戻り値として帰ってきたタプルから要素をそれぞれ取り出して画面に出力しています。このようにタプルなどのオブジェクトを戻り値として使用することで、複数の値を呼び出し元に戻すことができました。

なおタプルのオブジェクトを作成する時に ( と ) は省略可能なので、先ほどの例の関数は次のように記述することができます。

def myfunc():
    name = "Yamada"
    old = 24
    return name, old

ただタプルのオブジェクトを作成して戻り値として設定しているということが分かりにくいので、 ( と ) は省略せずに記載しています。

サンプルコード

次のサンプルを見てください。

def myfunc(num1, num2):
    goukei = num1 + num2
    heikin = (num1 + num2) / 2
    return (goukei, heikin)

num1 = 10
num2 = 8
x = myfunc(num1, num2)

print("num1 = " + str(num1))
>> num1 = 10
print("num2 = " + str(num2))
>> num2 = 8
print("合計 = " + str(x[0]))
>> 合計 = 18
print("平均 = " + str(x[1]))
>> 平均 = 9.0

今回のサンプルでは関数内で複数の計算を行い、それぞれの結果を要素として持つタプルのオブジェクトを作成し関数の呼び出し元に戻り値として返しています。

-- --

関数から呼び出し元へ戻り値を返す方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。