関数で複数の戻り値を使用したい場合

関数で複数の戻り値を使用したい場合

進導エイリ
進導エイリ

Pythonの関数で、実行結果を戻り値(return)として返却できることは分かったのですが、
複数の要素を返すことは出来ないのでしょうか?

関数における複数要素の返却は可能です。
実装の仕方は簡単なのですが、抑えておかなければならないポイントもあるので一緒に見ていきましょう。

講師
講師

通常の戻り値の設定

# 関数の作成
def nibai():
    return 10 * 2

# 関数の実行
result_nibai = nibai()
print(result_nibai)

# 実行結果
20

まずは通常の関数のおさらいです。
10×2を返すnibaiという関数を作成しました。
nibai関数の実行結果、つまり戻り値の10 * 2の計算結果はresult_nibaiに代入されていますね。

講師
講師

複数の戻り値の設定

では次に、複数の戻り値を設定してみましょう。

講師
講師
def get_user():
    user_name = '進導エイリ'
    user_id = 12345
    
    return user_name, user_id

user_name、user_idという2つの変数を持つget_userという関数を作成しました。
関数外でこれらの変数を使用するために、それぞれを戻り値として外部で取得したいですよね。
では、まず普通に実行して変数に代入してみましょう。

講師
講師
# 関数実行
result = get_user()
print(result)

# 実行結果
('進導エイリ', 12345)

無事にuser_nameとuser_idを取得することができました。
ですが、実行結果を見て違和感を感じる部分はありませんか?

講師
講師
進導エイリ
進導エイリ

実行結果が
‘進導エイリ’, 12345
ではなく
(‘進導エイリ’, 12345)となっています!
この形はタプルの型でしたっけ・・・?

そのとおり!
この表示形式はタプル型ですね!
念の為type関数を使って型を確認してみましょう。

講師
講師
print(type(result))

# 実行結果
<class 'tuple'>

これがポイントの1つ目です!
関数で複数の戻り値を設定し実行結果を1つの変数に代入させた場合、
その代入された値はタプル型となります。
タプル型なので、その中から各要素を取得することも可能です。

講師
講師
# get_user関数の実行結果result(タプル型)からそれぞれ要素を取得
print(result[0])
print(result[1])

# 実行結果
進導エイリ
12345

このようにインデックスで指定してあげればOKですね!
次に、関数実行時に複数の戻り値を複数の結果に代入するパターンをご紹介します。

講師
講師
# get_user関数の実行時に戻り値をそれぞれ変数に代入
result_name, result_id = get_user()
print(result_name)
print(result_id)

# 実行結果
進導エイリ
12345

result_name、result_idという変数を用意し、戻り値をそれぞれ代入させています。
この時注意してほしいのは、関数の戻り値の個数と結果を代入する変数の個数を合わせなければないらない。ということです。
この個数が一致していないとエラーが発生してしまいます。

講師
講師

タプルで取得する方法と、実行結果をそれぞれ変数に格納する方法の2つをご紹介しましたが、
どちらの方法が正しいというのはありません。
関数使用時の状況や、その後の戻り値使用目的に応じて、最適な方法を選んでいただければと思います。

講師
講師

まとめ

・関数の戻り値を複数設定することは可能!
・単純に関数を実行した場合、戻り値はタプル型で返却される。
・関数実行時に複数の変数を設定して関数を実行することも出来る。