切片对象

PyTypeObject PySlice_Type
切片对象的类型对象。这与thePython图层中的slice相同.
int PySlice_Check PyObject  *ob
返回如果ob是一个切片对象;ob一定不能NULL.
PyObject * PySlice_New PyObject  *start,PyObject  *stop,PyObject  *step
Return value: New reference.

返回具有给定值的新切片对象。start, 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
从切片对象slice,假设一系列长度length。对待指数大于length作为错误

返回0成功与-1没有异常设置的错误(除非其中一个索引不是None并且未能转换为整数,在这种情况下-1返回异常集).

您可能不想使用此功能.

更改版本3.2: slice参数的参数类型为PySliceObject*before.

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()。从切片对象slice假设一个长度为length的序列,并将切片的长度存储在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().Arguments start, 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
切片对象asC整数中提取开始,停止和步骤数据成员。默默地将大于PY_SSIZE_T_MAX的值减小到PY_SSIZE_T_MAX,默默地将启动和停止值提升到小于PY_SSIZE_T_MINPY_SSIZE_T_MIN,并默默地将步长值提升到小于-PY_SSIZE_T_MAX-PY_SSIZE_T_MAX.

错误地返回-10成功时

新版本3.6.1 .

Py_ssize_t PySlice_AdjustIndices Py_ssize_t  length,Py_ssize_t  *start,Py_ssize_t  *stop,Py_ssize_t  step
假设一个指定长度的序列调整开始/结束切片索引。以与正常切片的处理一致的方式剪切边界索引.

返回切片的长度。总是成功的。不调用Pythoncode.

新版本3.6.1.

Ellipsis对象

PyObject * Py_Ellipsis
Python Ellipsis对象。这个对象没有方法。就引用计数而言,它需要像任何其他对象一样进行预处理。就像Py_None它是一个单身对象.

评论被关闭。