切片对象
PyTypeObject PySlice_Type
属于 稳定 ABI.
切片对象的类型对象。 它与 Python 层面的 slice 是相同的对象。
int PySlice_Check(PyObject *ob)
如果 ob 是一个 slice 对象则返回真值;ob 必须不为 NULL
。 此函数总是会成功执行。
PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
返回值:新的引用。 属于 稳定 ABI.
返回一个具有给定值的新切片对象。 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)
属于 稳定 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) {
// 返回错误
}
会被替换为
if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
// 返回错误
}
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 会被多被求值。
自 3.6.1 版本弃用: 如果 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)
属于 稳定 ABI 自 3.7 版起.
从切片对象中将 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
。
Added in version 3.6.1.
Py_ssize_t PySlice_AdjustIndices(Py_ssize_t length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
属于 稳定 ABI 自 3.7 版起.
将 start/end 切片索引号根据指定的序列长度进行调整。 超出范围的索引号会以与普通切片一致的方式进行剪切。
返回切片的长度。 此操作总是会成功。 不会调用 Python 代码。
Added in version 3.6.1.
Ellipsis 对象
PyObject *Py_Ellipsis
Python Ellipsis
对象。 此对象没有任何方法。 像 Py_None 一样,它是一个 immortal 单例对象。
在 3.12 版本发生变更: Py_Ellipsis 是永久性对象。