slice.md
1> **Источник:** https://python-all.ru/3.12/c-api/slice.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты срезов89#### `PyTypeObject PySlice_Type`1011*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*1213Объект типа для объектов среза. Это то же самое, что [`slice`](https://python-all.ru/3.12/library/functions.html#slice) на уровне Python.1415#### `int PySlice_Check(PyObject *ob)`1617Возвращает истину, если *ob* является объектом среза; *ob* не должен быть `NULL`. Эта функция всегда завершается успешно.1819#### `PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)`2021*Возвращаемое значение: новая ссылка.*2223*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*2425Возвращает новый объект среза с указанными значениями. Параметры *start*, *stop* и *step* используются как значения атрибутов объекта среза с теми же именами. Любое из значений может быть `NULL`; в этом случае для соответствующего атрибута будет использоваться `None`.2627Возвращает `NULL` с установленным исключением, если новый объект не удалось выделить.2829#### `int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)`3031*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*3233Извлекает индексы start, stop и step из объекта среза *slice*, предполагая последовательность длины *length*. Считает индексы, превышающие *length*, ошибками.3435Возвращает `0` при успехе и `-1` при ошибке без установленного исключения (если только один из индексов не был `None` и не удалось преобразовать его в целое число, в этом случае возвращается `-1` с установленным исключением).3637Скорее всего, эту функцию не следует использовать.3839Изменено в версии 3.2: Тип параметра для параметра *slice* ранее был `PySliceObject*` .4041#### `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)`4243*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*4445Пригодная замена для [`PySlice_GetIndices()`](https://python-all.ru/3.12/c-api/slice.html#c.PySlice_GetIndices). Извлекает индексы start, stop и step из объекта среза *slice*, предполагая последовательность длины *length*, и сохраняет длину среза в *slicelength*. Выходящие за границы индексы обрезаются в соответствии с обработкой обычных срезов.4647Возвращает `0` при успехе и `-1` при ошибке с установленным исключением.4849> **Примечание**50>51> Эта функция считается небезопасной для последовательностей изменяемого размера. Её вызов следует заменить комбинацией [`PySlice_Unpack()`](https://python-all.ru/3.12/c-api/slice.html#c.PySlice_Unpack) и [`PySlice_AdjustIndices()`](https://python-all.ru/3.12/c-api/slice.html#c.PySlice_AdjustIndices), где52>53> ```c54> if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {55> // вернуть ошибку56> }57> ```58>59> заменяется на60>61> ```c62> if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {63> // вернуть ошибку64> }65> slicelength = PySlice_AdjustIndices(length, &start, &stop, step);66> ```6768Изменено в версии 3.2: Тип параметра для параметра *slice* ранее был `PySliceObject*` .6970Изменено в версии 3.6.1: Если `Py_LIMITED_API` не установлен или установлен в значение между `0x03050400` и `0x03060000` (не включая) или `0x03060100` и выше, `PySlice_GetIndicesEx()` реализован в виде макроса с использованием `PySlice_Unpack()` и `PySlice_AdjustIndices()`. Аргументы *start*, *stop* и *step* вычисляются более одного раза.7172Устарело с версии 3.6.1: Если `Py_LIMITED_API` установлен в значение меньше `0x03050400` или между `0x03060000` и `0x03060100` (не включая), `PySlice_GetIndicesEx()` является устаревшей функцией.7374#### `int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)`7576*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.7.*7778Извлекает элементы данных 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`.7980Возвращает `-1` с установленным исключением при ошибке, `0` при успехе.8182Добавлено в версии 3.6.1.8384#### `Py_ssize_t PySlice_AdjustIndices(Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)`8586*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable) начиная с версии 3.7.*8788Корректирует индексы начала/конца среза для последовательности указанной длины. Выходящие за границы индексы обрезаются в соответствии с обработкой обычных срезов.8990Возвращает длину среза. Всегда завершается успешно. Не вызывает код Python .9192Добавлено в версии 3.6.1.9394## Объект Ellipsis9596#### `PyTypeObject PyEllipsis_Type`9798*Часть [Stable ABI](https://python-all.ru/3.12/c-api/stable.html#stable).*99100Тип объекта Python [`Ellipsis`](https://python-all.ru/3.12/library/constants.html#Ellipsis). То же, что [`types.EllipsisType`](https://python-all.ru/3.12/library/types.html#types.EllipsisType) на уровне Python.101102#### `PyObject *Py_Ellipsis`103104Объект Python `Ellipsis`. У этого объекта нет методов. Подобно [`Py_None`](https://python-all.ru/3.12/c-api/none.html#c.Py_None), это [бессмертный](https://python-all.ru/3.12/c-api/slice.html) объект-одиночка.105106Изменено в версии 3.12: [`Py_Ellipsis`](https://python-all.ru/3.12/c-api/slice.html#c.Py_Ellipsis) является бессмертным.107