シーケンスプロトコル—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/3.8/c-api/sequence
移動先:案内検索

シーケンスプロトコル

int PySequence_Check(PyObject *o)
オブジェクトがシーケンスプロトコルを提供する場合は1を返し、それ以外の場合は0を返します。 dict サブクラスでない限り、__getitem__()メソッドを持つPythonクラスに対して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)
成功した場合は o1o2 の連結を返し、失敗した場合はNULLを返します。 これは、Python式o1 + o2と同等です。
PyObject *PySequence_Repeat(PyObject *o, Py_ssize_t count)
シーケンスオブジェクト o count 回、または失敗した場合はNULLを繰り返した結果を返します。 これは、Python式o * countと同等です。
PyObject *PySequence_InPlaceConcat(PyObject *o1, PyObject *o2)
成功した場合は o1o2 の連結を返し、失敗した場合はNULLを返します。 o1 がサポートしている場合、操作はインプレースで実行されます。 これは、Python式o1 += o2と同等です。
PyObject *PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
シーケンスオブジェクト o count 回、または失敗した場合はNULLを繰り返した結果を返します。 o がサポートしている場合、操作はインプレースで実行されます。 これは、Python式o *= countと同等です。
PyObject *PySequence_GetItem(PyObject *o, Py_ssize_t i)
oi 番目の要素、または失敗した場合はNULLを返します。 これは、Python式o[i]と同等です。
PyObject *PySequence_GetSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
シーケンスオブジェクト o のスライスを i1i2 の間で返すか、失敗した場合はNULLを返します。 これは、Python式o[i1:i2]と同等です。
int PySequence_SetItem(PyObject *o, Py_ssize_t i, PyObject *v)

オブジェクト voi 番目の要素に割り当てます。 例外を発生させ、失敗した場合は-1を返します。 成功すると0を返します。 これは、Pythonステートメントo[i] = vと同等です。 この関数v への参照を盗みません

vNULLの場合、要素は削除されますが、 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)
シーケンスオブジェクト vi1 から i2 までのシーケンスオブジェクト o のスライスに割り当てます。 これは、Pythonステートメントo[i1:i2] = vと同等です。
int PySequence_DelSlice(PyObject *o, Py_ssize_t i1, Py_ssize_t i2)
i1 から i2 までのシーケンスオブジェクト o のスライスを削除します。 失敗すると-1を返します。 これは、Pythonステートメントdel o[i1:i2]と同等です。
Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)
o 内の value の出現回数を返します。つまり、o[key] == valueのキーの数を返します。 失敗した場合は、-1を返します。 これは、Python式o.count(value)と同等です。
int PySequence_Contains(PyObject *o, PyObject *value)
oが含まれているかどうかを確認します。 o の項目が value と等しい場合は、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)
失敗した場合は、シーケンスまたは反復可能な o 、またはNULLと同じ内容のリストオブジェクトを返します。 返されるリストは新しいものであることが保証されています。 これは、Python式list(o)と同等です。
PyObject *PySequence_Tuple(PyObject *o)
失敗した場合は、シーケンスと同じ内容または反復可能な o 、またはNULLのタプルオブジェクトを返します。 o がタプルの場合、新しい参照が返されます。それ以外の場合、タプルは適切な内容で作成されます。 これは、Python式tuple(o)と同等です。
PyObject *PySequence_Fast(PyObject *o, const char *m)

シーケンスまたは反復可能な o を、他のPySequence_Fast*関数ファミリーで使用可能なオブジェクトとして返します。 オブジェクトがシーケンスまたは反復可能でない場合は、メッセージテキストとして m を指定して TypeError を発生させます。 失敗するとNULLを返します。

PySequence_Fast*関数は、 oPyTupleObject または PyListObject であり、 o [のデータフィールドにアクセスすることを前提としているため、このように名前が付けられています。 X160X]直接。

CPython実装の詳細として、 o がすでにシーケンスまたはリストである場合は、それが返されます。

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)
oPySequence_Fast()によって返され、 oNULLではないと仮定して、 o の長さを返します。 。 サイズは、 oPySequence_Size()を呼び出すことによっても取得できますが、 PySequence_Fast_GET_SIZE()は、 o がリストまたはタプル。
PyObject *PySequence_Fast_GET_ITEM(PyObject *o, Py_ssize_t i)
oPySequence_Fast()によって返されたと仮定して、 oi 番目の要素を返します。 oNULLではなく、 i は範囲内です。
PyObject **PySequence_Fast_ITEMS(PyObject *o)

PyObjectポインタの基になる配列を返します。 oPySequence_Fast()によって返され、 oNULLではないと想定します。

リストのサイズが変更されると、再割り当てによってアイテムの配列が再配置される場合があることに注意してください。 したがって、シーケンスを変更できないコンテキストでのみ、基になる配列ポインタを使用してください。

PyObject *PySequence_ITEM(PyObject *o, Py_ssize_t i)
失敗した場合は、 o またはNULLi 番目の要素を返します。 PySequence_GetItem()のより高速な形式ですが、 oPySequence_Check()が真であることを確認せず、負のインデックスを調整しません。