Документация Python неофициальный перевод
Содержание страницы

Объекты срезовSlice Objects

PyTypeObject PySlice_Type
Часть Stable ABI.

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

int PySlice_Check(PyObject *ob)

Возвращает истину, если ob является объектом среза; ob не должен быть NULL. Эта функция всегда завершается успешно.

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
Возвращаемое значение: новая ссылка. Часть Stable ABI.

Возвращает новый объект среза с указанными значениями. Параметры 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)
Часть Stable ABI.

Извлекает индексы start, stop и 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)
Часть Stable ABI.

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

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

Примечание

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

if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
    // вернуть ошибку
}

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

if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
    // вернуть ошибку
}
slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

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

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

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

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
Часть Stable ABI начиная с версии 3.7.

Извлекает элементы данных start, stop и step из объекта среза как целые числа C. Молча уменьшает значения, превышающие PY_SSIZE_T_MAX, до PY_SSIZE_T_MAX, молча увеличивает значения start и stop, меньшие PY_SSIZE_T_MIN, до PY_SSIZE_T_MIN, и молча увеличивает значения step, меньшие -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)
Часть Stable ABI начиная с версии 3.7.

Корректирует индексы начала/конца среза для последовательности указанной длины. Выходящие за границы индексы обрезаются в соответствии с обработкой обычных срезов.

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

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

Объект EllipsisEllipsis Object

PyTypeObject PyEllipsis_Type
Часть Stable ABI.

Тип объекта Python Ellipsis. То же, что types.EllipsisType на уровне Python.

PyObject *Py_Ellipsis

Объект Python Ellipsis. У этого объекта нет методов. Как и Py_None, это бессмертный объект-синглтон.

Изменено в версии 3.12: Py_Ellipsis является бессмертным.