note.nkmk.me

Pythonの関数で複数の戻り値を返す方法

Date: 2016-12-08 / Modified: 2018-10-22 / tags: Python

C言語などでは関数から複数の戻り値(返り値)を返すのはけっこう面倒だが、Pythonだとものすごく簡単に実現できる。

defによる関数の定義など基本的な内容は以下の記事を参照。

スポンサーリンク

カンマ区切りでreturn

Pythonでは、単純にカンマ区切りでreturnするだけで文字列だろうが数値だろうがまとめて返せる。

例として、以下のように文字列と数値を返すだけの関数を定義する。returnのあとにそれぞれをカンマ区切りで書くだけ。

def test():
    return 'abc', 100

Pythonにおいて、構文上必要な場合を除き、カンマで区切られた値は丸括弧を省略したタプルとみなされる。このため、上の例の関数はそれぞれの値を要素とするタプルを返すことになる。

タプルを作るのはカンマであり、丸括弧ではありません。丸括弧は省略可能ですが、空のタプルの場合や構文上の曖昧さを避けるのに必要な時は例外です。
組み込み型 — Python 3.7.1 ドキュメント

戻り値の型はタプルとなる。

result = test()

print(result)
print(type(result))
# ('abc', 100)
# <class 'tuple'>

各要素はそれぞれ関数で定義した型となる。

print(result[0])
print(type(result[0]))
# abc
# <class 'str'>

print(result[1])
print(type(result[1]))
# 100
# <class 'int'>

定義した戻り値の数を超えるインデックスを指定するとエラー。

# print(result[2])
# IndexError: tuple index out of range

アンパックして複数の戻り値をそれぞれ別々の変数に代入できる。

a, b = test()

print(a)
# abc

print(b)
# 100

2つだけでなく3つ以上の戻り値を指定したい場合も同様。

def test2():
    return 'abc', 100, [0, 1, 2]

a, b, c = test2()

print(a)
# abc

print(b)
# 100

print(c)
# [0, 1, 2]

リストを戻り値とする

[]で囲むとタプルではなくリストが戻り値となる。

def test_list():
    return ['abc', 100]

result = test_list()

print(result)
print(type(result))
# ['abc', 100]
# <class 'list'>
スポンサーリンク
シェア
このエントリーをはてなブックマークに追加

関連カテゴリー

関連記事