切片对象 — Python 文档
切片对象
- PyTypeObject PySlice_Type
- 切片对象的类型对象。 这与 Python 层中的 slice 相同。
- int PySlice_Check(PyObject *ob)
- 如果 ob 是切片对象,则返回 true; ob 不能是
NULL
。 此功能总是成功。
- 返回具有给定值的新切片对象。 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)
假设一个长度为 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
未设置或设置为0x03050400
和0x03060000
(不包括)或0x03060100
或更高 !PySlice_GetIndicesEx 使用 !PySlice_Unpack 和 !PySlice_AdjustIndices 作为宏实现。 参数 start、stop 和 step 被评估多次。Deprecated since version 3.6.1: If
Py_LIMITED_API
设置为小于0x03050400
或0x03060000
和0x03060100
之间的值(不包括) !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 它是一个单例对象。