Объекты среза¶
-
PyTypeObject
PySlice_Type
¶ Объект типа для объектов среза. Это то же самое, что и
slice
в слое Python.
-
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.