切片对象

PyTypeObject PySlice_Type

切片对象的类型对象。这和 slice 在python层中。

int PySlice_Check(PyObject *ob)

如果满足以下条件,则返回TRUE ob 是切片对象; ob 一定不能是 NULL 。此功能总是成功的。

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
Return value: New reference.

返回具有给定值的新切片对象。这个 开始stopstep 参数用作具有相同名称的切片对象属性的值。任何值都可以是 NULL ,在这种情况下, None 将用于相应的属性。返回 NULL 如果无法分配新对象。

int PySlice_GetIndices(PyObject *slice, Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)

从切片对象中检索开始、停止和步骤索引 ,假设一个长度序列 长度 . 治疗指数大于 长度 作为错误。

返回 0 论成功与否 -1 出现错误,没有异常集(除非其中一个索引不是 None 无法转换为整数,在这种情况下 -1 返回异常集)。

您可能不想使用此函数。

在 3.2 版更改: 的参数类型 参数为 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() . 从切片对象检索开始、停止和步骤索引 假设一个长度序列 长度 ,并将切片的长度存储在 细长 . 以与正常切片处理一致的方式剪裁超出界限的索引。

返回 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 版更改: 的参数类型 参数为 PySliceObject* 以前。

在 3.6.1 版更改: 如果 Py_LIMITED_API 未设置或设置为介于 0x030504000x03060000 (不包括)或 0x03060100 或更高 !PySlice_GetIndicesEx 是作为宏实现的,使用 !PySlice_Unpack!PySlice_AdjustIndices . 参数 开始stopstep 多次评估。

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)

将切片对象中的开始、停止和步骤数据成员提取为C整数。以静默方式减少大于 PY_SSIZE_T_MAXPY_SSIZE_T_MAX ,静默地提高启动和停止值小于 PY_SSIZE_T_MINPY_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 新版功能.

省略对象

PyObject *Py_Ellipsis

Python Ellipsis 对象。此对象没有方法。它需要像对待任何其他对象一样对待参考计数。类似于 Py_None 它是一个单例对象。