切片对象

PyTypeObject PySlice_Type
作为 稳定 ABI 的一部分。

切片对象的类型对象。这与 Python 层中的 slice 相同。

int PySlice_Check(PyObject *ob)

如果 ob 是切片对象,则返回 true;ob 不得为 NULL。此函数总是成功的。

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
返回值: 新引用。 稳定ABI 的一部分。

返回一个具有给定值的新切片对象。startstopstep 参数用作同名切片对象属性的值。任何值都可以是 NULL,在这种情况下,将为相应的属性使用 None

如果无法分配新对象,则返回 NULL 并设置异常。

int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
作为 稳定 ABI 的一部分。

从切片对象 slice 中检索 start、stop 和 step 索引,假设序列长度为 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)
作为 稳定 ABI 的一部分。

PySlice_GetIndices() 的可用替代品。从切片对象 slice 中检索 start、stop 和 step 索引,假设序列长度为 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 或将其设置为 0x030504000x03060000(不包括)之间或 0x03060100 或更高的值,则 PySlice_GetIndicesEx() 被实现为使用 PySlice_Unpack()PySlice_AdjustIndices() 的宏。参数 startstopstep 会被评估多次。

自 3.6.1 版本弃用: 如果 Py_LIMITED_API 设置为小于 0x03050400 或介于 0x030600000x03060100(不包括)之间的值,则 PySlice_GetIndicesEx() 是一个已弃用的函数。

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
自 3.7 版本起成为 稳定ABI 的一部分。

从切片对象中提取 start、stop 和 step 数据成员作为 C 整数。静默地将大于 PY_SSIZE_T_MAX 的值减小到 PY_SSIZE_T_MAX,静默地将小于 PY_SSIZE_T_MIN 的 start 和 stop 值提升到 PY_SSIZE_T_MIN,静默地将小于 -PY_SSIZE_T_MAX 的 step 值提升到 -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)
自 3.7 版本起成为 稳定ABI 的一部分。

根据指定长度的序列调整 start/end 切片索引。超出边界的索引以与处理正常切片一致的方式进行裁剪。

返回切片的长度。总是成功的。不调用 Python 代码。

在 3.6.1 版本中添加。

省略号对象

PyTypeObject PyEllipsis_Type
作为 稳定 ABI 的一部分。

Python Ellipsis 对象的类型。与 Python 层中的 types.EllipsisType 相同。

PyObject *Py_Ellipsis

Python Ellipsis 对象。此对象没有方法。与 Py_None 一样,它是一个 不朽的 单例对象。

在 3.12 版本中更改: Py_Ellipsis 是不朽的。