概要
関数から複数の値を返すタスクは次のとおりです。さまざまなプログラミングのシナリオでよく発生します。 Python では、これを実現するために利用できるオプションがいくつかあります。この説明では、さまざまなアプローチとその相対的な利点と欠点について説明します。
タプルの使用
一般的な方法は、タプルを使用することです。次の例を考えてみましょう:
def f(x): y0 = x + 1 y1 = x * 3 y2 = y0 ** y3 return (y0, y1, y2)
このアプローチは簡単ですが、返される値の数が増えると煩雑になる可能性があり、各要素の順序と意味を追跡することが困難になります。
辞書の使用
もう 1 つのオプションは、辞書を使用して戻り値を表すことです。例:
def g(x): y0 = x + 1 y1 = x * 3 y2 = y0 ** y3 return {'y0': y0, 'y1': y1, 'y2': y2}
このアプローチでは名前付きキーが可能になり、特定の値への明確さとアクセスが容易になります。
クラスの使用
__slots__ 属性を使用すると、クラスは特定の属性にスペースを事前に割り当てることで、メモリ使用量をさらに最適化できます。例:
class ReturnValue(object): __slots__ = ["y0", "y1", "y2"] def __init__(self, y0, y1, y2): self.y0 = y0 self.y1 = y1 self.y2 = y2
データクラスの使用 (Python 3.7 )
データクラスは、明示的なコンストラクターや属性を必要とせずにデータを保持するクラスを定義する便利な方法です。宣言。これらは、自動化されたメソッド、型チェック、その他の利点を提供します。
@dataclass class Returnvalue: y0: int y1: float y3: int
リストの使用
あまり一般的ではありませんが、リストを返すことも別の選択肢です。ただし、混合型の要素が存在する可能性があるため、理想的ではない可能性があります。
名前付きタプル (Python 2.6 )
名前付きタプルは、タプルと辞書の機能を組み合わせたものです。 、属性またはインデックスによってアクセスできる名前付き要素を提供します。これらは、特別なクラスを構築する必要なしに複数の値を返す場合に特に便利です。
import collections Point = collections.namedtuple('Point', ['x', 'y']) p = Point(1, 2) print(p.x, p.y) # Output: 1 2
最適なメソッド
最適なメソッドの選択は、特定のクラスによって異なります。状況の要件と好み。ただし、一般に、名前付きタプル は、複数の値を明確かつ簡潔に返すための多用途かつ効率的なオプションであると考えられています。これらは、柔軟性とタイプセーフティの間の強力なバランスを提供します。
以上がPython 関数から複数の値を効果的に返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。