# タプルオブジェクト (tuple object)

`PyTupleObject`

  この `PyObject` のサブタイプは Python のタプルオブジェクトを表現します。

PyTypeObject `PyTuple_Type`

  この `PyTypeObject` のインスタンスは Python のタプル型を表現します; Python レイヤにおける `tuple` と同じオブジェクトです。

int `PyTuple_Check`(PyObject *p)

  p がタプルオブジェクトか、タプル型のサブタイプのインスタンスである場合に真を返します。

int `PyTuple_CheckExact`(PyObject *p)

  p がタプルオブジェクトで、かつタプル型のサブタイプのインスタンスでない場合に真を返します。

PyObject* `PyTuple_New`(Py_ssize_t len)
  Return value: New reference.

  サイズが len の新たなタプルオブジェクトを返します。失敗すると NULL を返します。

PyObject* `PyTuple_Pack`(Py_ssize_t n, ...)
  Return value: New reference.

  サイズが n の新たなタプルオブジェクトを返します。失敗すると NULL を返します。タプルの値は後続の n 個の Python オブジェクトを指す C 引数になります。`PyTuple_Pack(2, a, b)` は `Py_BuildValue("(OO)", a, b)` と同じです。

Py_ssize_t `PyTuple_Size`(PyObject *p)

  タプルオブジェクトへのポインタを引数にとり、そのタプルのサイズを返します。

Py_ssize_t `PyTuple_GET_SIZE`(PyObject *p)

  タプル p のサイズを返しますが、p は非 NULL でなくてはならず、タプルオブジェクトを指していなければなりません; この関数はエラーチェックを行いません。

PyObject* `PyTuple_GetItem`(PyObject *p, Py_ssize_t pos)
  Return value: Borrowed reference.

  p の指すタプルオブジェクト内の、位置 pos にあるオブジェクトを返します。 pos が範囲を超えている場合、 NULL を返して `IndexError` 例外をセットします。

PyObject* `PyTuple_GET_ITEM`(PyObject *p, Py_ssize_t pos)
  Return value: Borrowed reference.

  `PyTuple_GetItem()` に似ていますが、引数に対するエラーチェックを行いません。

PyObject* `PyTuple_GetSlice`(PyObject *p, Py_ssize_t low, Py_ssize_t high)
  Return value: New reference.

  p の指すタプルオブジェクト内の、位置 low から high までのスライスを取り出して、タプルオブジェクトとして返します。

int `PyTuple_SetItem`(PyObject *p, Py_ssize_t pos, PyObject *o)

  p の指すタプルオブジェクト内の位置 pos に、オブジェクト o への参照を挿入します。成功した場合には `0` を返します。

  注釈

  この関数は o への参照を "盗み取り" ます。

void `PyTuple_SET_ITEM`(PyObject *p, Py_ssize_t pos, PyObject *o)

  `PyTuple_SetItem()` に似ていますが、エラーチェックを行わず、新たなタプルに値を入れるとき 以外には使ってはなりません 。

  注釈

  この関数は o への参照を "盗み取り" ます。

int `_PyTuple_Resize`(PyObject **p, Py_ssize_t newsize)

  タプルをリサイズする際に使えます。 newsize はタプルの新たな長さです。タプルは変更不能なオブジェクト ということになっている ので、この関数はこのオブジェクトに対してただ一つしか参照がない時以外には使ってはなりません。タプルがコード中の他の部分ですでに参照されている場合には、この関数を 使ってはなりません 。タプルは常に指定サイズの末尾まで伸縮します。成功した場合には `0` を返します。クライアントコードは、 `*p` の値が呼び出し前と同じになると期待してはなりません。 `*p` が置き換えられた場合、オリジナルの `*p` は破壊されます。失敗すると `-1` を返し、 `*p` を NULL に設定して、 `MemoryError` または `SystemError` を送出します。

int `PyTuple_ClearFreeList`()

  free list をクリアします。解放された要素数を返します。

# Struct Sequence オブジェクト

struct sequence オブジェクトは `namedtuple()` オブジェクトと等価なC オブジェクトです。 つまり、その要素に属性を通してアクセスすることができるシーケンスです。 struct sequence を生成するには、まず特定のstruct sequence 型を生成しなければなりません。

PyTypeObject* `PyStructSequence_NewType`(PyStructSequence_Desc *desc)

  後述の desc 中のデータから新しい struct sequence 型を生成します。返される型のインスタンスは `PyStructSequence_New()` で生成できます。

void `PyStructSequence_InitType`(PyTypeObject *type, PyStructSequence_Desc *desc)

  struct sequence 型である type を desc をもとにその場で初期化します。

int `PyStructSequence_InitType2`(PyTypeObject *type, PyStructSequence_Desc *desc)

  `PyStructSequence_InitType` と同じですが、成功した場合には `0` を、失敗した場合には `-1` を返します。

  バージョン 3.4 で追加.

`PyStructSequence_Desc`

  生成するstruct sequence 型のメタデータを保持します。

  フィールド | C の型 | 意味
  --- | --- | ---
  `name` | `char *` | 生成するstruct sequence 型の名前
  `doc` | `char *` | 生成する型のdocstringへのポインタ、または省略する場合は NULL
  `fields` | `PyStructSequence_Field *` | 新しい型のフィールド名を格納した NULL 終端された配列へのポインタ
  `n_in_sequence` | `int` | Python 側で可視となるフィールドの数 (もしタプルとして使用する場合)

`PyStructSequence_Field`

  struct sequenceのフィールドについて記述します。struct sequence はタプルをモデルにしているため、全てのフィールドは `PyObject*` として型付けされます。 `PyStructSequence_Desc` の `fields` 配列の添え字によって struct sequenceのどのフィールドについて記載しているかが決まります。

  フィールド | C の型 | 意味
  --- | --- | ---
  `name` | `char *` | フィールドの名前。もし名前づけされたフィールドのリストの終端を表す場合は NULL。名前がないままにする場合は、PyStructSequence_UnnamedField を設定します
  `doc` | `char *` | フィールドのdocstring、省略する場合は NULL

char* `PyStructSequence_UnnamedField`

  フィールド名を名前がないままするための特殊な値。

PyObject* `PyStructSequence_New`(PyTypeObject *type)

  type のインスタンスを生成します。 type は `PyStructSequence_NewType()` によって事前に生成していなければなりません。

PyObject* `PyStructSequence_GetItem`(PyObject *p, Py_ssize_t pos)

  p の指すstruct sequence内の、位置 pos にあるオブジェクトを返します。境界チェックを行いません。

PyObject* `PyStructSequence_GET_ITEM`(PyObject *p, Py_ssize_t pos)

  `PyStructSequence_GetItem()` と同等のマクロです。

void `PyStructSequence_SetItem`(PyObject *p, Py_ssize_t pos, PyObject *o)

  struct sequence p の pos の位置にあるフィールドに値 o を設定します。`PyTuple_SET_ITEM()` のように、生成したてのインスタンスに対してのみ使用すべきです。

  注釈

  この関数は o への参照を "盗み取り" ます。

void `PyStructSequence_SET_ITEM`(PyObject *p, Py_ssize_t *pos, PyObject *o)

  `PyStructSequence_SetItem()` と同等のマクロ。

  注釈

  この関数は o への参照を "盗み取り" ます。