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

int PySequence_Check(PyObject *o)

Return 1 if the object provides the sequence protocol, and 0 otherwise. Note that it returns 1 for Python classes with a __getitem__() method, unless they are dict subclasses, since in general it is impossible to determine what type of keys the class supports. This function always succeeds.

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 への参照を 盗み取りません

If v is NULL, the element is deleted, but this feature is deprecated in favour of using PySequence_DelItem().

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 を``PySequence_Fast*`` ファミリの関数で利用できるオブジェクトとして返します。オブジェクトがシーケンスでもイテラブルでもない場合は、メッセージ m を持つ、 :exec:`TypeError` を送出します。失敗したら NULL を返します。

PySequence_Fast* ファミリの関数は、oPyTupleObject または PyListObject と仮定し、o のデータフィールドに直接アクセスするため、そのように名付けられています。

CPythonの実装では、もし o が 既にシーケンスかタプルであれば、o そのものを返します。

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

Returns the length of o, assuming that o was returned by PySequence_Fast() and that o is not NULL. The size can also be retrieved by calling PySequence_Size() on o, but PySequence_Fast_GET_SIZE() is faster because it can assume o is a list or tuple.

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() の高速版であり、PySequence_Check()o が真を返すかどうかの検証や、負の添え字の調整を行いません。