2

重複の可能性:
Python (または任意の不変データ型) でタプルが必要なのはなぜですか?

私は Python を学んでおり、Ruby のバックグラウンドがあります。タプルを持ったことがないので、なぜタプルが必要なのか、なぜ Python がそれほどタプルに依存しているのか想像できません。

4

3 に答える 3

5

チェス盤の正方形の座標は、タプルの良い使い方の一例です。私は通常、リストのリストやnumpyまたは配列モジュールではなく、タプルでインデックス付けされたPythondictを使用して多次元配列を実装します。

board = {}
board[ 3, 6 ] = "black queen"
board[ 0, 0 ] = "white king"

ミュータブル(リストなど)を辞書キーとして使用することはできないため、このためのタプルが必要です。

関数から複数の値を返したい場合があります。たとえば、成功または失敗を示すブール値と、失敗モードを説明する文字列です。

if trickyOperationSucceeds():
    return True,"Success!"
return False,"The tricky thing failed!"

これは頻繁に使用するパターンではありませんが、問題が発生しない場合があります。ここでリストを使用することもできます。通常は代わりにタプルを使用するのは慣例によるものです。

一緒に渡す必要のある独立した値を表す方法を検討する場合、タプル、ディクテーション、およびクラスの間にはほぼ連続性があります。その複合リターンを表す3つの方法を検討してください。

(False, "The tricky thing failed!")
{ "status": False, "message": "The tricky thing failed!" }
ResultObject( status=False, message="The tricky thing failed!" )

これを実行しているコード内の場所が1つしかない場合、タプルはその簡潔さで魅力的です。このパターンを頻繁に使用していて、これらの結果のペアを異なるモジュール間でやり取りする場合は、要素が意味のあるキーを持つdictに「アップグレード」することができます。これらの結果がソフトウェア設計の主要な部分になる場合は、それらをオブジェクトクラスのインスタンスに再度アップグレードすることができます。これは、形式と使いやすさのバランスです。

于 2012-08-10T20:47:35.117 に答える
3

タプルは単に不変のシーケンスであるため、タプルの個々の項目に割り当てることはできません。一例として、 のような xy 座標のセットが考えられます(5, 10), (-3, 20), (0, 0)。これらの座標の一部を更新する必要がある場合は、次のようにタプルを再作成できます

coord = (5, 10)
# Our thing moves
newCoord = (coord[0] + dx, coord[1] + dy)
于 2012-08-10T20:35:19.263 に答える
1

タプルは異種データに使用されることになっています。これは、PythonでCstructまたはPascalに相当しrecordます。このようなタイプに要素を追加しても意味がないため、変更可能である必要はありません。同種のデータ用のリストと比較してください。

people = [(u'Bob', 24), (u'Sally', 27)]
polygon = [(1, 1), (2, 3), (0, 0)]
于 2012-08-10T20:41:44.753 に答える