切片对象 — Python 文档

来自菜鸟教程
Python/docs/3.7/c-api/slice
跳转至:导航、​搜索

切片对象

PyTypeObject PySlice_Type
切片对象的类型对象。 这与 Python 层中的 slice 相同。
int PySlice_Check(PyObject *ob)
如果 ob 是切片对象,则返回 true; ob 不能是 NULL
PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
返回具有给定值的新切片对象。 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)

假设一个长度为 length 的序列,从切片对象 slice 中检索开始、停止和步长索引。 将大于 length 的索引视为错误。

成功时返回 0,错误时返回 -1,没有设置异常(除非索引之一不是 None 并且无法转换为整数,在这种情况下 [ X179X] 与异常集一起返回)。

您可能不想使用此功能。

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() 的可用替代品。 假设一个长度为 length 的序列,从切片对象 slice 中检索开始、停止和步长索引,并将切片的长度存储在 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 被评估不止一次。

Deprecated since version 3.6.1: If Py_LIMITED_API 设置为小于 0x030504000x030600000x03060100 之间的值(不包括) PySlice_GetIndicesEx() 是一个不推荐使用的函数。

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)

从切片对象中提取开始、停止和步骤数据成员作为 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 中的新功能。


省略号对象

PyObject *Py_Ellipsis
Python Ellipsis 对象。 这个对象没有方法。 在引用计数方面,它需要像任何其他对象一样对待。 像 Py_None 它是一个单例对象。