Python関数から複数の戻り値を返す方法:タプルの自動パックとアンパック

多くのプログラミング言語では、関数から返せる値(戻り値)は原則として1つだけです。複数の値を返したい場合、配列やオブジェクトに詰め込むなどの工夫が必要になります。

しかし、Pythonではカンマ(,)で区切るだけで、非常に簡単に複数の値を返すことができます。

この記事では、関数から複数の値を返す仕組みと、それを受け取るための「アンパック」という手法について解説します。

目次

複数の値を返す仕組み

Pythonの関数で return a, b のように記述すると、Pythonは内部的にこれらの値を**タプル(tuple)**という一つのデータ構造にまとめて(パッキングして)返します。

つまり、複数の値を返しているように見えますが、実際には「タプルという1つのオブジェクト」を返しています。

具体的なコード例

例として、長方形の「幅」と「高さ」を受け取り、その「面積」と「周長(外周の長さ)」を同時に計算して返す関数を作成します。

def calculate_rectangle_properties(width, height):
    """
    長方形の幅と高さから、面積と周長を計算して返す関数
    """
    # 面積の計算
    area = width * height
    
    # 周長の計算: (幅 + 高さ) * 2
    perimeter = (width + height) * 2
    
    # カンマで区切って2つの値を返す(タプルとして返される)
    return area, perimeter

# --- 関数の実行 ---

# サイズ定義
rect_width = 5
rect_height = 8

# 関数の呼び出し
result = calculate_rectangle_properties(rect_width, rect_height)

print(f"戻り値: {result}")
print(f"戻り値の型: {type(result)}")

実行結果:

戻り値: (40, 26)
戻り値の型: <class 'tuple'>

このように、戻り値は (40, 26) というタプルになっています。

戻り値の受け取り方(アンパック)

タプルとして返ってきた値を、それぞれ別の変数として扱いたい場合、**アンパック(展開)**という機能を使用します。これはPythonで最も推奨される受け取り方です。

呼び出し元の左辺に、戻り値と同じ数の変数を用意するだけで、自動的に値が分解されて代入されます。

# 戻り値を area_val と perimeter_val にアンパックして代入
area_val, perimeter_val = calculate_rectangle_properties(10, 20)

print(f"面積: {area_val}")
print(f"周長: {perimeter_val}")

実行結果:

面積: 200
周長: 60

不要な戻り値を無視する場合(_ アンダースコア)

関数が複数の値を返すが、そのうちの一部しか必要ない場合は、変数名に _(アンダースコア)を使用するのが慣習です。これにより、「この値は意図的に使っていません」と明示できます。

# 面積だけが必要で、周長は不要な場合
area_only, _ = calculate_rectangle_properties(6, 6)

print(f"正方形の面積: {area_only}")
# _ には周長が入っているが、以降の処理では使わない

実行結果:

正方形の面積: 36

まとめ

  • Pythonの関数は return 値1, 値2 と記述するだけで複数の値を返せます。
  • 内部的にはタプルとして返されています。
  • 呼び出し元では 変数1, 変数2 = 関数() のように記述して、値を個別の変数にアンパックするのが一般的です。
  • 不要な値がある場合は _ で受け取ることで、コードの意図を明確にできます。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次