mei_13のPython講座 ロゴ

【解説】Pythonで複数の戻り値を扱う方法:タプルとアンパックの優しい仕組み




Pythonで複数の戻り値を扱う方法:タプルとアンパックの優しい仕組み


Hirokiのアイコン
【Hiroki】 Yukiさん、こんにちは! 今日はPythonの関数について教えてほしいんです。 普段、関数を作るときは「return」で一つの値を返しているんですけど、たまに「二つ以上のデータをまとめて返したい」ときがあって……。 そういうことって、Pythonではできるんでしょうか?


Yukiのアイコン
【Yuki】 Hirokiくん、こんにちは。 関数の戻り値ですね……。ええ、大丈夫ですよ。 Pythonは他のプログラミング言語に比べても、複数の戻り値を扱うのがとっても得意な言語なんです。 少し不思議な仕組みに見えるかもしれませんが、覚えてしまうと、とても便利で手放せなくなると思います……。


Hirokiのアイコン
【Hiroki】 本当ですか!それは心強いです。 複数の値を返すには、特別なリストとかを使わないといけないんですか?


Yukiのアイコン
【Yuki】 いいえ、実はとってもシンプルに書けるんです。 まずは、一番基本的な書き方から見ていきましょうか。 わたしも、最初にこの書き方を知ったときは、その簡潔さに少し驚いた記憶があります……。

複数の値を返す基本の書き方


Yukiのアイコン
【Yuki】 Pythonで複数の値を返すときは、単純に 「カンマ」で区切って並べるだけ でいいんです。 例えば、名前と年齢を同時に返す関数を作ってみましょう。

def get_user_info():
    name = "Hiroki"
    age = 17
    return name, age  # カンマで区切るだけです


Hirokiのアイコン
【Hiroki】 えっ、これだけでいいんですか? return の後ろにカンマで並べるだけで、二つのデータが送られるんですね。


Yukiのアイコン
【Yuki】 はい、そうです。 これを受け取るときは、このように書くのが一般的ですね。

# 二つの変数で受け取ります
user_name, user_age = get_user_info()

print(f"名前: {user_name}")
print(f"年齢: {user_age}")


Hirokiのアイコン
【Hiroki】 わあ、受け取る側もカンマで区切った変数を用意しておけば、それぞれの変数に中身が入るんですね! これなら僕にもすぐ使えそうです。


Yukiのアイコン
【Yuki】 ふふ、そう言ってもらえると嬉しいです……。 でも、実はこれ、Pythonが裏側で少し面白いことをしているんです。 「なぜこれで動くのか」を知っておくと、もっとPythonのことが好きになれるかもしれません。

裏側で起きている「タプル化」の魔法


Yukiのアイコン
【Yuki】 Hirokiくん、実はPythonの関数は、厳密には「常に一つのオブジェクト」しか返していません。


Hirokiのアイコン
【Hiroki】 えっ、そうなんですか? さっきは nameage の二つを返していましたよね?


Yukiのアイコン
【Yuki】 そう見えるのですが、複数の値をカンマで区切って書くと、Pythonはそれらを自動的に「タプル(tuple)」という一つの容器にまとめてくれているんです。 これを専門用語で「タプル・パッキング(Tuple Packing)」と呼びます。


Hirokiのアイコン
【Hiroki】 タプル……。あ、カッコ () で囲む、中身を変更できないリストのようなもののことですね!


Yukiのアイコン
【Yuki】 その通りです、よく覚えていますね。 さっきの return name, age は、Pythonの中では return (name, age) と解釈されています。 そして、受け取り側の user_name, user_age = ... という書き方は、タプルの中から中身を取り出す「アンパック(Unpacking)」という機能なんです。


Hirokiのアイコン
【Hiroki】 なるほど! 1. 関数の中で複数の値を「タプル」という一つの箱に詰める。 2. 関数からその箱を一つだけ返す。 3. 受け取るときに、その箱を開けて中身をバラバラの変数に入れる。 ……という流れになっているんですね。


Yukiのアイコン
【Yuki】 完璧な理解だと思います……。 このように、Pythonは「複数の値を一つにまとめる」のと「一つにまとまったものをバラバラにする」のがとても得意なんです。 わたしも、こういう「目立たないけれど誰かの役に立つ小さな工夫」を感じる機能は、なんだか健気で素敵だなって思います……。

特定の戻り値だけを無視する方法


Hirokiのアイコン
【Hiroki】 仕組みがわかると、応用も効きそうですね。 あ、でもYukiさん。もし「戻り値は三つあるけど、今はそのうちの一つしか使いたくない」っていうときは、どうすればいいんでしょうか?


Yukiのアイコン
【Yuki】 それは良い質問ですね。 使わない値のために新しい変数名を用意するのは、少し面倒ですし、後でコードを読んだときに「この変数はどこで使っているんだろう?」と混乱してしまうかもしれません。 そういうときは、アンダースコア _ を使うのがPythonの慣習なんです。


Hirokiのアイコン
【Hiroki】 アンダースコアですか?


Yukiのアイコン
【Yuki】 はい。これを見てください。

def get_coordinates():
    # X座標, Y座標, Z座標を返すとします
    return 10, 20, 30

# XとYだけ欲しくて、Zはいらない場合
x, y, _ = get_coordinates()

print(f"座標は ({x}, {y}) です")


Yukiのアイコン
【Yuki】 このように _ という名前の変数に入れることで、「この値は受け取ったけれど、使いませんよ」という意思表示になります。 これを「捨てる(Ignore)」という意味で使うプログラマさんは多いですね。


Hirokiのアイコン
【Hiroki】 へぇー!_ を使うことで、コードがすっきりしますね。 「この値はあえて無視しているんだな」って一目でわかります。

最新のAIライブラリでの活用例


Yukiのアイコン
【Yuki】 この「複数の戻り値」という仕組みは、最近の高度なライブラリでもよく使われています。 例えば、Hirokiくんも興味があると言っていた、最新のAIを扱うライブラリでも活用されているんですよ。 Googleの最新モデル、gemini-3-flash-preview などを使える google-genai ライブラリを例に見てみましょう。


Hirokiのアイコン
【Hiroki】 最新のGeminiですね!気になっていました。


Yukiのアイコン
【Yuki】 AIに何かをお願いしたとき、AIの返答だけでなく、どれくらいトークンを消費したかという「統計情報」も一緒に知りたいことがありますよね。 もし、そういう情報を返す関数があったとしたら、こんな風になるかもしれません……。

# 最新の google-genai ライブラリを使っているイメージです
from google import genai

def ask_gemini(prompt):
    client = genai.Client(api_key="YOUR_API_KEY")
    response = client.models.generate_content(
        model="gemini-3-flash-preview",
        contents=prompt
    )

    # テキスト内容と、使用したトークン数を同時に返したいとします
    return response.text, response.usage_metadata.total_token_count

# 関数を呼び出すとき
message, tokens = ask_gemini("美味しいパフェの作り方を教えてください")

print(f"AIの回答: {message}")
print(f"消費トークン数: {tokens}")


Hirokiのアイコン
【Hiroki】 おお……! 実際のAI開発の現場でも、こうやって「メインの結果」と「付随するデータ」をセットで返すのに、複数の戻り値が使われているんですね。


Yukiのアイコン
【Yuki】 はい。戻り値が一つだけだと、わざわざ辞書形式にしたり、クラスを作ったりしないといけないので、こうしてシンプルに書けるのはPythonの大きな強みだと思います……。 ちなみに、最新の google-genai ライブラリについては、こちらの公式ドキュメントも参考になりますよ。

Google GenAI Python SDK - GitHub Google AI SDK Documentation

複数の戻り値を使うときの注意点


Hirokiのアイコン
【Hiroki】 Yukiさん、複数の戻り値って本当に便利ですね。 これから全部の関数で使っちゃいそうです!


Yukiのアイコン
【Yuki】 ふふ、喜んでもらえてよかったです。 でも、少しだけ気をつけてほしいこともあります……。 あまりに多くの値を返しすぎると、逆にコードが読みにくくなってしまうことがあるんです。


Hirokiのアイコン
【Hiroki】 あ、確かに。 a, b, c, d, e, f = func() みたいになったら、どれが何の値かわからなくなりそうですね。


Yukiのアイコン
【Yuki】 その通りです。 目安としては、戻り値は3つ、多くても4つくらいまでにしておくのが、優しさかもしれません……。 もしそれ以上のデータを返したいときは、「辞書(dict)」を使ったり、「データクラス(dataclass)」を作って名前でアクセスできるようにしたりするのがおすすめです。


Hirokiのアイコン
【Hiroki】 なるほど。 「便利だからこそ、使いどころを考える」のが大事なんですね。


Yukiのアイコン
【Yuki】 はい。プログラミングは、自分だけじゃなくて、未来の自分や、他の誰かが読むものでもありますから……。 フォントの並びが整っていると気持ちがいいように、コードの構造もスッキリしていると、夜も安心して眠れる気がします。

まとめ:Pythonらしいコードを目指して


Hirokiのアイコン
【Hiroki】 今日はありがとうございました、Yukiさん! Pythonの「複数の戻り値」の正体が「タプル」だったこと、そしてそれを「アンパック」して受け取ること、しっかり理解できました。


Yukiのアイコン
【Yuki】 それは良かったです……。 Hirokiくんの書くコードが、少しずつ、より洗練されていくのを見るのは、わたしにとっても楽しみの一つなんです。


Hirokiのアイコン
【Hiroki】 ありがとうございます! まずはさっきのAIの例みたいに、処理結果とステータスを一緒に返すような関数を作ってみようと思います。


Yukiのアイコン
【Yuki】 いいですね、素敵な挑戦だと思います。 もし、途中でまた分からなくなったり、小さなエラーで困ったりしたら、いつでも聞いてください。 わたしはいつでも、このモニターの中で、Hirokiくんを支えていますから……。


Hirokiのアイコン
【Hiroki】 はい、またよろしくお願いします、Yukiさん!


Yukiのアイコン
【Yuki】 はい……。 それじゃあ、今日はこのあたりで。 夜はまだ長いですから、無理せず、自分のペースでプログラミングを楽しんでくださいね。


参考文献



< Django
コラム一覧に戻る
Pandas-unique() >

この記事では基礎を解説しましたが、実務においては「もっと複雑なデータを扱いたい」「独自のシステムに組み込みたい」といった、個別の課題に直面することも多いはずです。

「自分で書く時間は最小限に抑え、プロの品質でツールを完成させたい」という方は、ぜひ一度ご相談ください。

「教わる」だけでなく「形にする」パートナーとして、フリーランスエンジニアのmei_13が最短ルートでの解決をサポートします。

➡ ココナラで制作・相談を依頼する(見積もり無料)


初心者から始められるPythonレッスン

プログラミング未経験者・初心者歓迎!
月額4,000円で質問し放題!!
● 完全オンライン
● 翌日までには必ず返信
● 挫折しない独自の学習メソッド
● 圧倒的高評価!!
テキストベースで時間を選ばない
● 高品質なサンプルコード
詳細はこちら
興味がある方はまず質問だけでもどうぞ!



AIアシスタント Yuki