시퀀스 프로토콜

int PySequence_Check(PyObject *o)

객체가 시퀀스 프로토콜을 제공하면 1을 반환하고, 그렇지 않으면 0을 반환합니다. __getitem__() 메서드가 있는 파이썬 클래스의 경우 dict 서브 클래스가 아닌 한 1을 반환하는 것에 유의하십시오. 일반적으로 어떤 형의 키를 지원하는지 판단할 수 없기 때문입니다. 이 함수는 항상 성공합니다.

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

성공 시 시퀀스 o의 객체 수를 반환하고, 실패하면 -1을 반환합니다. 이것은 파이썬 표현식 len(o)와 동등합니다.

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

성공 시 o1o2의 이어붙이기를 반환하고, 실패하면 NULL을 반환합니다. 이것은 파이썬 표현식 o1 + o2와 동등합니다.

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

시퀸스 객체 ocount 번 반복한 결과를 반환하거나, 실패 시 NULL을 반환합니다. 이것은 파이썬 표현식 o * count와 동등합니다.

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

성공 시 o1o2의 이어붙이기를 반환하고, 실패하면 NULL을 반환합니다. 이 연산은 o1가 지원하면 제자리에서(in-place) 수행됩니다. 이것은 파이썬 표현식 o1 += o2와 동등합니다.

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

시퀸스 객체 ocount 번 반복한 결과를 반환하거나, 실패 시 NULL을 반환합니다. 이 연산은 o가 지원하면 제자리에서(in-place) 수행됩니다. 이것은 파이썬 표현식 o *= count와 동등합니다.

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

oi 번째 요소를 반환하거나, 실패하면 NULL을 반환합니다. 이것은 파이썬 표현식 o[i]와 동등합니다.

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

시퀀스 객체 oi1i2 사이의 슬라이스를 반환하거나, 실패하면 NULL을 반환합니다. 이것은 파이썬 표현식 o[i1:i2]와 동등합니다.

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

객체 voi 번째 요소에 대입합니다. 실패하면 예외를 발생시키고 -1을 반환합니다; 성공하면 0을 반환합니다. 이것은 파이썬 문장 o[i] = v와 동등합니다. 이 함수는 v에 대한 참조를 훔치지 않습니다.

vNULL이면, 요소가 삭제되지만, 이 기능은 PySequence_DelItem() 사용을 위해 폐지되었습니다.

int PySequence_DelItem(PyObject *o, Py_ssize_t i)

o 객체의 i 번째 요소를 삭제합니다. 실패하면 -1을 반환합니다. 이것은 파이썬 문장 del o[i]와 동등합니다.

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

시퀀스 객체 v를 시퀀스 객체 oi1에서 i2 사이의 슬라이스에 대입합니다. 이것은 파이썬 문장 o[i1:i2] = v와 동등합니다.

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

시퀀스 객체 oi1에서 i2 사이의 슬라이스를 삭제합니다. 실패하면 -1을 반환합니다. 이것은 파이썬 문장 del o[i1:i2]와 동등합니다.

Py_ssize_t PySequence_Count(PyObject *o, PyObject *value)

o에 있는 value의 수를 반환합니다. 즉, o[key] == value를 만족하는 key의 수를 반환합니다. 실패하면 -1을 반환합니다. 이것은 파이썬 표현식 o.count(value)와 동등합니다.

int PySequence_Contains(PyObject *o, PyObject *value)

ovalue가 있는지 확인합니다. o의 항목 중 하나가 value와 같으면 1을 반환하고, 그렇지 않으면 0을 반환합니다. 에러 시 -1을 반환합니다. 이는 파이썬 표현식 value in o와 동등합니다.

Py_ssize_t PySequence_Index(PyObject *o, PyObject *value)

o[i] == value을 만족하는 첫 번째 인덱스 i를 반환합니다. 에러 시 -1을 반환합니다. 이것은 파이썬 표현식 o.index(value)와 동등합니다.

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

시퀀스나 이터러블 o와 같은 내용을 가진 리스트 객체를 반환하거나, 실패하면 NULL을 반환합니다. 반환된 리스트는 새로운 것으로 보장됩니다. 이것은 파이썬 표현식 list(o)와 동등합니다.

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

시퀀스나 이터러블 o와 같은 내용을 가진 튜플 객체를 반환하거나, 실패하면 NULL을 반환합니다. o가 튜플이면, 새로운 참조가 반환되고, 그렇지 않으면 튜플이 적절한 내용으로 만들어집니다. 이것은 파이썬 표현식 tuple(o)와 동등합니다.

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

시퀀스나 이터러블 o를 다른 PySequence_Fast* 계열 함수에서 사용할 수 있는 객체로 반환합니다. 객체가 시퀀스나 이터러블이 아니면 m을 메시지 텍스트로 사용하여 TypeError를 발생시킵니다. 실패 시 NULL을 반환합니다.

PySequence_Fast* 함수는 oPyTupleObjectPyListObject라고 가정하고 o의 데이터 필드에 직접 액세스하기 때문에 이렇게 이름 붙였습니다.

CPython 구현 세부 사항으로, o가 이미 시퀀스나 리스트면, 반환됩니다.

Py_ssize_t PySequence_Fast_GET_SIZE(PyObject *o)

o의 길이를 반환하는데, oPySequence_Fast()에 의해 반환되었고, oNULL이 아니라고 가정합니다. 크기는 o에 대해 PySequence_Size()를 호출하여 얻을 수도 있지만, PySequence_Fast_GET_SIZE()o가 리스트나 튜플이라고 가정할 수 있으므로 더 빠릅니다.

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

oi 번째 요소를 반환하는데, oPySequence_Fast()에 의해 반환되었고, oNULL이 아니며, i가 경계 내에 있다고 가정합니다.

PyObject** PySequence_Fast_ITEMS(PyObject *o)

PyObject 포인터의 하부 배열을 반환합니다. oPySequence_Fast()에 의해 반환되었고, oNULL이 아니라고 가정합니다.

리스트의 크기가 변경되면, 재할당이 항목 배열을 재배치할 수 있음에 유의하십시오. 따라서, 시퀀스가 변경될 수 없는 문맥에서만 하부 배열 포인터를 사용하십시오.

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

oi 번째 요소를 반환하거나, 실패하면 NULL을 반환합니다. PySequence_GetItem()의 빠른 형식이지만, o에 대해 PySequence_Check()가 참인지 검사하지 않고, 음수 인덱스를 조정하지 않습니다.