Объекты среза

PyTypeObject PySlice_Type

Объект типа для объектов среза. Это то же самое, что и slice в слое Python.

int PySlice_Check(PyObject *ob)

Возвращает истину, если ob — объект среза; ob не должен быть NULL.

PyObject* PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
Return value: New reference.

Возвращает новый объект среза с заданными значениями. Параметры start, stop и step используются в качестве значений одноимённых атрибутов объекта среза. Любое из значений может быть NULL, и в этом случае None будет использоваться для соответствующего атрибута. Возвращает NULL, если новый объект не может быть выделен.

int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)

Извлечь индексы начала, остановки и шага из объекта среза slice, предполагая, что у последовательности длина length. Считает ошибки индексами, превышающими length.

Возвращает 0 в случае успеха и -1 в случае ошибки без множества исключений (если только один из индексов не был None и не был преобразован в целое число, и в этом случае возвращается -1 с множеством исключений).

Вероятно, вы не захотите использовать эту функцию.

Изменено в версии 3.2: Тип параметра для параметра slice раньше был PySliceObject*.

int PySlice_GetIndicesEx(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength)

Подходящая замена для PySlice_GetIndices(). Извлекает индексы начала, остановки и шага из объекта среза slice, предполагая последовательность длиной length, и сохранить длину среза в slicelength. Индексы за пределами границ отсекаются способом, совместимым с обработкой обычных срезов.

Возвращает 0 в случае успеха и -1 в случае ошибки с установленным исключением.

Примечание

Функция считается небезопасной для последовательностей с изменяемым размером. Её вызов следует заменить комбинацией PySlice_Unpack() и PySlice_AdjustIndices(), где:

if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
    // return error
}

заменяется на:

if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
    // return error
}
slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

Изменено в версии 3.2: Тип параметра для параметра slice раньше был PySliceObject*.

Изменено в версии 3.6.1: Если Py_LIMITED_API не задан или имеет значение между 0x03050400 и 0x03060000 (не включая) или 0x03060100 или выше: c:func:!PySlice_GetIndicesEx реализуется как макрос с использованием: c:func:!PySlice_Unpack и: c:func:!PySlice_AdjustIndices. Аргументы start, stop и step вычисляются более одного раза.

Не рекомендуется, начиная с версии 3.6.1: Если для Py_LIMITED_API задано значение меньше 0x03050400 или между 0x03060000 и 0x03060100 (не включая): c:func:!PySlice_GetIndicesEx является устаревшей функцией.

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)

Извлечь элементы данных start, stop и step из объекта среза как int C. Незаметно уменьшает значения от PY_SSIZE_T_MAX до PY_SSIZE_T_MAX, беззвучно повышает значения запуска и остановки от PY_SSIZE_T_MIN до PY_SSIZE_T_MIN и незаметно повышает значения шага от -PY_SSIZE_T_MAX до -PY_SSIZE_T_MAX.

В случае ошибки возвращает -1, в случае успеха — 0.

Добавлено в версии 3.6.1.

Py_ssize_t PySlice_AdjustIndices(Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)

Регулировка индексов начального/конечного среза, предполагая, что у последовательности есть указанная длина. Индексы за пределами границ отсекаются способом, совместимым с обработкой обычных срезов.

Возвращает длину среза. Всегда успешно. Не вызывает Python код.

Добавлено в версии 3.6.1.

Объект с многоточием

PyObject *Py_Ellipsis

Объект Python Ellipsis. У этого объекта нет методов. С ним нужно обращаться так же, как и с любым другим объектом, в отношении счётчиков ссылок. Как и Py_None, это одноэлементный объект.