Python で関数から複数の戻り値を返す
- Python で関数から複数の戻り値を返すためにタプルを使用する
- Python で関数から複数の戻り値を返すためにリストを使用する
- Python で関数から複数の戻り値を返すために辞書を使用する
- Python で関数から複数の戻り値を返すクラスを使用する
-
Python で関数から複数の戻り値を返すために
dataclass
を使用する
関数はどんなプログラミング言語にも欠かせないものです。関数とは、プログラミングにおいて特定の操作を実行するために呼び出すことができるコードのブロックです。通常、関数は値を返すために使用されます。この値は、数値、文字列、またはその他のデータ型のいずれかになります。
このチュートリアルでは、複数の戻り値を返す関数を作成するためのさまざまな方法について説明します。これを実現するために、ユーザー定義の関数からリスト、辞書、およびその他のオブジェクトのような異なるデータオブジェクトを返します。
Python で関数から複数の戻り値を返すためにタプルを使用する
カンマで区切られた関数から値を返す場合、それらはタプルとみなされます。タプルは通常括弧で囲まれています。以下のコードでは、Python の関数からタプルを返します。
def return_multi(a):
b = a + 1
c = a + 2
return b, c
x = return_multi(5)
print(x, type(x))
出力:
(6, 7) <class 'tuple'>
Python で関数から複数の戻り値を返すためにリストを使用する
Python のリストは、共通の名前の下に、特定の位置に異なるアイテムを格納するために使用されます。関数は、以下のようにリスト内の複数の戻り値を返すこともできます。
def return_multi(a):
b = a + 1
c = a + 2
return [b, c]
x = return_multi(5)
print(x, type(x))
出力:
[6, 7] <class 'list'>
Python で関数から複数の戻り値を返すために辞書を使用する
辞書は Python でキーと値のペアを格納するために使用されます。異なる値に割り当てられたキーを持つ関数から辞書を返すことで、より整理された形式で最終的な出力を得ることができます。次の例を見てください。
def return_multi(a):
b = a + 1
c = a + 2
return {"b": b, "c": c}
x = return_multi(5)
print(x, type(x))
出力:
{'b': 6, 'c': 7} <class 'dict'>
Python で関数から複数の戻り値を返すクラスを使用する
クラスは、異なるデータメンバと関数を含み、これらのメンバにアクセスするためのオブジェクトを作成することができます。クラス構造とそのデータメンバに基づいて、そのようなユーザ定義クラスのオブジェクトを返すことができます。例えば、以下のようになります。
class return_values:
def __init__(self, a, b):
self.a = a
self.b = b
def return_multi(a):
b = a + 1
c = a + 2
t = return_values(b, c)
return t
x = return_multi(5)
print(x.a, x.b, type(x))
出力:
6 7 <class '__main__.return_values'>
Python で関数から複数の戻り値を返すために dataclass
を使用する
dataclass
は Python v3.7 以降で追加された新しい興味深い機能です。伝統的なクラスに似ていますが、主にデータを保存するために使われ、基本的な機能はすべて実装されています。このようなオブジェクトを作成するには、@dataclass
デコレータと dataclass
モジュールが使われます。以下のコードでは、関数から dataclass
を返します。
from dataclasses import dataclass
@dataclass
class return_values:
a: int
b: int
def return_multi(a):
b = a + 1
c = a + 2
t = return_values(b, c)
return t
x = return_multi(5)
print(x.a, x.b, type(x))
出力:
6 7 <class '__main__.return_values'>
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn