私は今クラスで Python を学んでおり、タプルをデータ型の 1 つとして取り上げました。ウィキペディアのページを読みましたが、そのようなデータ型が実際に役立つ場所がわかりませんでした。おそらく Python で、不変の数値セットが必要になる例をいくつか挙げることができますか? これはリストとどう違うのですか?
11 に答える
- タプルは、関数から複数の結果を返したい場合に使用されます。
- それらは不変であるため、辞書のキーとして使用できます (リストはできません)。
タプルは、複数のデータをキーに結合する必要があり、そのためのクラスを作成したくない場合に、優れた辞書キーを作成します。
a = {}
a[(1,2,"bob")] = "hello!"
a[("Hello","en-US")] = "Hi There!"
この機能は主に、メッシュの頂点の座標であるキーを持つディクショナリを作成するために使用しました。ただし、私の特定のケースでは、関係する浮動小数点数の正確な比較はうまく機能しましたが、これはあなたの目的に常に当てはまるとは限りません[その場合、受信した浮動小数点数をある種の固定小数点整数に変換する可能性があります]
私はこの説明が好きです。
基本的に、一定の構造がある場合はタプルを使用する必要があり (1 番目の位置は常に 1 つのタイプの値を保持し、2 番目の位置は別のタイプの値を保持するなど)、同種の値のリストにはリストを使用する必要があります。
もちろん常に例外はありますが、これは良い一般的なガイドラインです。
タプルとリストは、一般的に同じ用途を持っています。一般に、不変データ型には多くの利点があり、主に同時実行の問題についてです。
したがって、本質的に揮発性のないリストがあり、消費者がそれを変更していないことを保証する必要がある場合は、タプルを使用できます。
典型的な例は、会社の部門、カテゴリなどのアプリケーションの固定データです。このデータが変更された場合、通常は 1 つのプロデューサーがタプルを再構築します。
タプルは一連の値です。値は任意の型にすることができ、整数によってインデックスが付けられるため、タプルはリストとは異なります。最も重要な違いは、タプルが不変であることです。
タプルは、コンマで区切られた値のリストです。
t = 'p', 'q', 'r', 's', 't'
タプルを括弧で囲むことをお勧めします:
t = ('p', 'q', 'r', 's', 't')
常に 2 つ以上のオブジェクトをセットとして扱う場合に便利です。
リストは、機能に関して、常にタプルを置き換えることができます (明らかに、dict のキーを除く)。ただし、タプルを使用すると処理が速くなります。たとえば、Java の不変文字列についても同じことが言えます。文字列を変更できないようにする必要があるのはいつでしょうか。一度もない!
より良いプログラムを作成するためにできることを制限することについてのまともな議論を読んだところです。関数型プログラミングが重要な理由
タプルは、複数の値を格納するのに便利です。お気づきのように、タプルは不変のリストのようなものです。たとえば、一度作成すると、要素を追加/削除/交換することはできません。
不変であることの利点の 1 つは、タプルが固定サイズであるため、実行時に特定の最適化を実行できることです。これは、タプルが戻り値または関数へのパラメーターのコンテキストで使用される場合に特に有益です。
文字列の % 操作や複数の戻り値のように構文的に必要な場所に加えて、軽量クラスの形式としてタプルを使用します。たとえば、不透明な Cookie をあるメソッドから呼び出し元に渡し、それを別のメソッドに渡すオブジェクトがあるとします。タプルは、複数の値を含む別のクラスを定義することなく、その Cookie に複数の値をパックするための優れた方法です。
ただし、私はこの特定の使用について慎重になろうとしています。コード全体で Cookie を自由に使用する場合は、クラスを作成することをお勧めします。それらが 1 つの場所 (たとえば、メソッドの 1 つのペア) でのみ使用される場合は、タプルを使用することがあります。いずれにせよ、これは Python であるため、タプルから始めて、呼び出し元のコードを変更することなく、カスタム クラスのインスタンスに変更できます。
タプルは以下で使用されます:
- 要素のシーケンスを不変にしたい場所
- タプル割り当てで
a,b=1,2
- 可変長引数で
def add(*arg) #arg is a tuple
return sum(arg)