Slice Objects

  • PyTypeObject PySlice_Type

    • 切片对象的类型对象。这与 Python 层中的slice相同。
  • int PySlice_Check(PyObject ** ob *)

    • 如果* ob *是切片对象,则返回 true;否则,返回 true。 * ob *不得为NULL
  • PyObject * PySlice_New(PyObject 开始PyObject* 停止*,PyObject *步骤)

    • 返回值:新参考.

返回具有给定值的新 slice 对象。参数* 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 * length ,则从切片对象 slice 检索开始,停止和步进索引。将大于 length *的索引视为错误。

如果成功,则返回0,如果没有错误,则返回-1,且未设置任何异常(除非其中一个索引不是None且未能转换为整数,在这种情况下,将返回-1并设置了异常)。

您可能不想使用此Function。

在版本 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 * length ,从切片对象 slice 检索开始,停止和步长索引,并将切片的长度存储在 slicelength *中。超出范围的索引将以与常规切片的处理一致的方式进行裁剪。

如果设置了异常,则返回0成功,返回-1错误。

Note

对于可调整大小的序列,此Function不安全。应将其调用替换为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()实现为宏。对参数* start stop step *进行了多次评估。

从版本 3.6.1 开始不推荐使用:如果Py_LIMITED_API的值小于0x030504000x030600000x03060100(不包括)之间,则PySlice_GetIndicesEx()是不推荐使用的Function。

  • 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 中的新Function。

  • 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 中的新Function。

Ellipsis Object

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