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

PyTypeObject PySlice_Type
Part of the Стабильный ABI.

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

int PySlice_Check(PyObject *ob)

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

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
Part of the Стабильный ABI.

Извлекает индексы start, stop и step из объекта slice срез, предполагая последовательность длины 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)
Part of the Стабильный 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) {
    // 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 реализуется как макрос используя PySlice_Unpack() и 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)
Part of the Стабильный ABI since version 3.7.

Извлеките элементы данных start, stop и step из объекта slice в виде целых чисел на языке Си. Автоматически уменьшайте значения, превышающие 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)
Part of the Стабильный ABI since version 3.7.

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

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

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

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

PyObject *Py_Ellipsis

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

Вернуться на верх