#
6.3 配列プロトコル (sequence protocol)

int `PySequence_Check`( | PyObject *o)

  オブジェクトが配列プロトコルを提供している場合に `1` を返し、 そうでないときには `0` を返します。 この関数呼び出しは常に成功します。

int `PySequence_Size`( | PyObject *o)

  成功すると配列 o 中のオブジェクトの数を返し、 失敗すると `-1` を返します。 配列プロトコルをサポートしないオブジェクトに対しては、 Python の式 "`len(o)`" と同じ になります。

int `PySequence_Length`( | PyObject *o)

  `PySequence_Size()` の別名です。

PyObject* `PySequence_Concat`( | PyObject *o1, PyObject *o2)

  戻り値: 新たな参照.
  成功するとo1 と o2 の連結 (concatenation) を返し、 失敗すると `NULL` を返します。 Python の式 "`o1 + o2`" と同じです。

PyObject* `PySequence_Repeat`( | PyObject *o, int count)

  戻り値: 新たな参照.
  成功するとオブジェクトo の count 回繰り返しを返し、 失敗すると `NULL` を返します。 Python の式 "`o * count`" と同じです。

PyObject* `PySequence_InPlaceConcat`( | PyObject *o1, PyObject *o2)

  戻り値: 新たな参照.
  成功するとo1 と o2 の連結 (concatenation) を返し、 失敗すると `NULL` を返します。 o1 が in-place 演算をサポートする場合、in-place 演算を 行います。 Python の式 "`o1 += o2`" と同じです。

PyObject* `PySequence_InPlaceRepeat`( | PyObject *o, int count)

  戻り値: 新たな参照.
  成功するとオブジェクトo の count 回繰り返しを返し、 失敗すると `NULL` を返します。 o1 が in-place 演算をサポートする場合、in-place 演算を 行います。 Python の式 "`o *= count`" と同じです。

PyObject* `PySequence_GetItem`( | PyObject *o, int i)

  戻り値: 新たな参照.
  成功すると o の i 番目の要素を返し、 失敗すると `NULL` を返します。 Python の式 "`o[i]`" と同じです。

PyObject* `PySequence_GetSlice`( | PyObject *o, int i1, int i2)

  戻り値: 新たな参照.
  成功するとo の i1 から i2 までの間のスライスを返し、 失敗すると `NULL` を返します。 Python の式 "`o[i1:i2]`" と同じです。

int `PySequence_SetItem`( | PyObject *o, int i, PyObject *v)

  o の i 番目の要素に v を代入します。 失敗すると `-1` を返します。 Python の文 "`o[i] = v`" と同じです。 この関数は v への参照を盗み取りません。

int `PySequence_DelItem`( | PyObject *o, int i)

  o の i 番目の要素を削除します。 失敗すると `-1` を返します。 Python の文 "`del o[i]`" と同じです。

int `PySequence_SetSlice`( | PyObject *o, int i1, int i2, PyObject *v)

  o の i1 から i2 までの間のスライスに v を代入します。 Python の文 "`o[i1:i2] = v`" と同じです。

int `PySequence_DelSlice`( | PyObject *o, int i1, int i2)

  配列オブジェクト o の i1 から i2 までの間の スライスを削除します。失敗すると `-1` を返します。 Python の文 "`del o[i1:i2]`" と同じです。

PyObject* `PySequence_Tuple`( | PyObject *o)

  戻り値: 新たな参照.
  成功するとo をタプルで返します。 失敗すると `NULL` を返します。 Python の式 "`tuple(o)`" と同じです。

int `PySequence_Count`( | PyObject *o, PyObject *value)

  o における value の出現回数、すなわち `o[key] == value` となる key の個数を 返します。失敗すると `-1` を返します。 Python の式 "`o.count(value)`" と同じです。

int `PySequence_Contains`( | PyObject *o, PyObject *value)

  o にvalue が入っているか判定します。 o のある要素が value と等価 (equal) ならば`1` を 返し、それ以外の場合には `0` を返します。 エラーが発生すると `-1` を返します。 Python の式 "`value in o`" と同じです。

int `PySequence_Index`( | PyObject *o, PyObject *value)

  `o[i] == value` となる最初に見つかったインデクス i を返します。 エラーが発生すると `-1` を返します。 Python の式 "`o.index(value)`" と同じです。

PyObject* `PySequence_List`( | PyObject *o)

  戻り値: 新たな参照.
  任意の配列 o と同じ内容を持つリストオブジェクトを返します。 返されるリストは必ず新しいリストオブジェクトになります。

PyObject* `PySequence_Tuple`( | PyObject *o)

  戻り値: 新たな参照.
  任意の配列 o と同じ内容を持つタプルオブジェクトを返します。 o がタプルの場合、新たな参照を返します。それ以外の場合、 適切な内容が入ったタプルを構築して返します。

PyObject* `PySequence_Fast`( | PyObject *o, const char *m)

  戻り値: 新たな参照.
  配列 o がすでにタプルやリストであれば o を返し、 そうでなければ o をタプルで返します。 返されるタプルのメンバにアクセスするには `PySequence_Fast_GET_ITEM()` を使ってください。 失敗すると `NULL` を返します。 オブジェクトが配列でなければ、m がメッセージテキストに なっている`TypeError` を送出します。

PyObject* `PySequence_Fast_GET_ITEM`( | PyObject *o, int i)

  戻り値: 借りた参照.
  o が`NULL`でなく、`PySequence_Fast()` が返した オブジェクトであり、かつi がインデクスの範囲内にあると 仮定して、o の i 番目の要素を返します。

PyObject* `PySequence_ITEM`( | PyObject *o, int i)

  戻り値: 新たな参照.
  成功すると the ith element of o を返し、 失敗すると `NULL` を返します。 `PySequence_GetItem()` ですが、 `PySequence_Check(o)` が真になるかチェックせず、 負のインデクスに対する調整を行いません。 バージョン2.3 以降で新規追加された 仕様です。

int `PySequence_Fast_GET_SIZE`( | PyObject *o)

  o が`NULL`でなく、`PySequence_Fast()` が返した オブジェクトであると仮定して、o の長さを返します。 o のサイズは`PySequence_Size()` を呼び出しても 得られますが、`PySequence_Fast_GET_SIZE()` の方が o をリストかタプルであると仮定して処理するため、より高速です。