シーケンス型プロトコル (sequence protocol)

int PySequence_Check(PyObject *o)

オブジェクトがシーケンス型プロトコルを提供している場合は 1 を、そうでない場合は 0 を返します。 __getitem__() メソッドを持つ Python クラスについては、それらが dict のサブクラスでない限り、 1 を返すのに注意してください。そうなる理由は、一般的なケースではオブジェクトがどの種類のキーをサポートしているかを判別するのが不可能だからです。 この関数は常に成功します。

Py_ssize_t PySequence_Size(PyObject *o)
Py_ssize_t PySequence_Length(PyObject *o)

成功するとシーケンス o 中のオブジェクトの数を返し、失敗すると -1 を返します。これは、Python の式 len(o) と同じになります。

PyObject* PySequence_Concat(PyObject *o1, PyObject *o2)
Return value: New reference.

成功すると o1o2 の連結 (concatenation) を返し、失敗すると NULL を返します。Python の式 o1 + o2 と同じです。

PyObject* PySequence_Repeat(PyObject *o, Py_ssize_t count)
Return value: New reference.

成功するとオブジェクト ocount 回繰り返しを返し、失敗すると NULL を返します。Python の式 o * count と同じです。

PyObject* PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
Return value: New reference.

成功すると o1o2 の連結 (concatenation) を返し、失敗すると NULL を返します。o1in-place 演算をサポートする場合、in-place 演算を行います。Python の式 o1 += o2 と同じです。

PyObject* PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
Return value: New reference.

成功するとオブジェクト ocount 回繰り返しを返し、失敗すると NULL を返します。oin-place 演算をサポートする場合、in-place 演算を行います。Python の式 o *= count と同じです。

PyObject* PySequence_GetItem(PyObject *o, Py_ssize_t i)
Return value: New reference.

成功すると oi 番目の要素を返し、失敗すると NULL を返します。Python の式 o[i] と同じです。

PyObject* PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
Return value: New reference.

成功すると oi1 から i2 までの間のスライスを返し、失敗すると NULL を返します。Python の式 o[i1:i2] と同じです。

int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)

oi 番目の要素に v を代入します。 失敗すると、例外を送出し -1 を返します; 成功すると 0 を返します。 これは Python の文 o[i] = v と同じです。 この関数は v への参照を 盗み取りません

vNULL の場合はその要素が削除されますが、この機能は非推奨であり、 PyObject_DelAttr() を使うのが望ましいです。

int PySequence_DelItem(PyObject *o, Py_ssize_t i)

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

int PySequence_SetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2, PyObject *v)

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

int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)

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

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)

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

int PySequence_Contains(PyObject *o, PyObject *value)

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

Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)

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

PyObject* PySequence_List(PyObject *o)
Return value: New reference.

シーケンスもしくはイテラブル o と同じ内容を持つリストオブジェクトを返します。 失敗したら NULL を返します。 返されるリストは新しく作られたことが保証されています。 これは Python の式 list(o) と同等です。

PyObject* PySequence_Tuple(PyObject *o)
Return value: New reference.

シーケンスあるいはイテラブルである o と同じ内容を持つタプルオブジェクトを返します。 失敗したら NULL を返します。o がタプルの場合、新たな参照を返します。 それ以外の場合、適切な内容が入ったタプルを構築して返します。 Pythonの式 tuple(o) と同等です。

PyObject* PySequence_Fast(PyObject *o, const char *m)
Return value: New reference.

シーケンスかイテラブルの o をリストとして返します。 o が既にタプルかリストだった場合は o をそのまま返します。 返されたタプルのメンバにアクセスするには PySequence_Fast_GET_ITEM() を使います。 失敗すると NULL を返します。 オブジェクトがシーケンスやイテラブルでなければ、 m をメッセージテキストにとする TypeError を送出します。

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

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

PyObject* PySequence_Fast_GET_ITEM(PyObject *o, Py_ssize_t i)
Return value: Borrowed reference.

oNULL でなく、 PySequence_Fast() が返したオブジェクトであり、かつ i がインデクスの範囲内にあると仮定して、 oi 番目の要素を返します。

PyObject** PySequence_Fast_ITEMS(PyObject *o)

PyObject ポインタの背後にあるアレイを返します。この関数では、 oPySequence_Fast() の返したオブジェクトであり、 NULL でないものと仮定しています。

リストのサイズが変更されるとき、メモリ再確保が要素の配列を再配置するかもしれないことに注意してください。そのため、シーケンスの変更が発生しないコンテキストでのみ背後にあるポインタを使ってください。

PyObject* PySequence_ITEM(PyObject *o, Py_ssize_t i)
Return value: New reference.

成功すると oi 番目の要素を返し、失敗すると NULL を返します。 PySequence_GetItem() ですが、 o への PySequence_Check() が真になるかチェックせず、負のインデクスに対する調整を行いません。