Pythonで関数から複数の値を返す5つの方法【タプル・辞書・クラス・リスト・ジェネレータ】
Pythonの関数は、複数の値を一度に返すことができます。返された値はそのまま変数に格納でき、関数が返せるのは1つの変数だけとは限りません。0個、1個、2個、それ以上の値でも自由に返せます。
実は、この「複数の値を返せる」という性質はPythonの標準的な機能です。C++やJavaなど、多くの他のプログラミング言語では利用できない便利な特徴といえます。
関数から複数の値を返すには、目的に応じてタプル、リスト、辞書などのオブジェクトを活用します。本記事では、代表的な5つの方法をコード例とともにわかりやすく解説します。
方法1:タプル(tuple)を使う
def func(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** 3
return (y0, y1, y2)ただし、返す値の数が増えると、この方法は徐々に扱いづらくなります。6つや7つの値を返したい場合はどうでしょうか。タプルで包み続けることは可能ですが、「どの位置にどの値が入っているか」を忘れやすくなり、受け取り側でアンパックする際にも手間がかかります。
方法2:辞書(dict)を使う
より優れた解決策のひとつが、辞書を使う方法です。
def func(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** 3
return {'y0': y0, 'y1': y1, 'y2': y2}これにより、返されたオブジェクトから特定のメンバーだけを取り出せるようになります。
たとえば、次のようにキーを指定してアクセスします。
result['y1']
方法3:クラスを使う
もうひとつの選択肢が、クラスを使って専用の構造体を定義して返す方法です。
class ReturnValue:
def __init__(self, y0, y1, y2):
self.y0 = y0
self.y1 = y1
self.y2 = y2
def g(x):
y0 = x + 1
y1 = x * 3
y2 = y0 ** 3
return ReturnValue(y0, y1, y2)属性名で値にアクセスできるため、コードの意図が明確になり、可読性が高まるのがメリットです。
方法4:リスト(list)を使う
リストを使って値をまとめて返す方法もあります。
def func(x):
y0 = x + 1
result = [y0]
result.append(x * 3)
result.append(y0 ** 3)
return resultリストは順序付きのコレクションなので、インデックスで値を取り出せます。ただし、タプルと同様に「どの位置に何の値があるか」を管理する必要がある点には注意しましょう。
方法5:ジェネレータ(generator)を使う
yieldを使えば、値を1つずつ順番に返すこともできます。非常に大量の値を返す必要がある場合、リストやタプルといったシーケンスを一括で作成すると、システムリソースを大量に消費する可能性があります。そんなときにジェネレータが威力を発揮します。
def func(x):
y0 = x + 1
yield y0
yield x * 3
yield y0 ** 3どの方法を選ぶのがベスト?
結局のところ、どの方法が最適かは、あなたの好みや要件によって異なります。セットアップの手間が少ない辞書方式を選んでもよいですし、辞書の中身が何を意味するのか混乱するのを避けられるクラス方式も有効です。また、大量のデータを効率的に処理したいならジェネレータが適しています。それぞれのメリット・デメリットを理解した上で、状況に合った方法を採用しましょう。
-
Python(Matlplotlib)でXごとに複数のY値を持つ散布図を作成する方法
PythonのMatplotlibを使って、各Xに対して複数のY値を持つ散布図を作成するには、NumPyでx・yのデータ点を生成し、zip()関数で両者をペアにして反復処理しながらプロットしていく方法が有効です。この記事では、その具体的な手順とサンプルコードを解説します。 作成手順 図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。 NumPyを使用して、ランダムな xs と ys のデータ点を作成します。 zip() で xs と ys をペアにまとめ、一緒に反復処理します。 それぞれの x と y の値を使って散布図を描画します。 show() メソッドを呼び
-
Pythonの関数から複数の値を返す4つの方法【タプル・リスト・辞書・クラス】
はじめに Pythonでは、関数から複数の値をまとめて返すことが標準機能として簡単に行えます。具体的には、タプル、リスト、辞書(dict)、そしてユーザー定義クラスのオブジェクトという4つの形式が利用できます。 それぞれの方法を、実際のコード例とともに順番に見ていきましょう。 方法1:タプルとして返す(最も一般的) Pythonで最もよく使われるのがこの方法です。return a, bのようにカンマで区切って値を並べると、自動的にタプルとしてまとめて返されます。受け取る側ではアンパックを使って、個別の変数へ直接代入することも可能です。 >>> def function():