切片對象?

PyTypeObject PySlice_Type?

切片對象的類型對象。 它與 Python 層面的 slice 是相同的對象。

int PySlice_Check(PyObject?*ob)?

如果 ob 是一個 slice 對象則返回真值;ob 必須不為 NULL

PyObject* PySlice_New(PyObject?*start, PyObject?*stop, PyObject?*step)?
Return value: New reference.

返回一個具有給定值的新 slice 對象。 start, stopstep 形參會被用作 slice 對象相應名稱的屬性的值。 這些值中的任何一個都可以為 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 對象 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)?

PySlice_GetIndices() 的可用替代。 從 slice 對象 slice 提取 start, stop 和 step 索引號,將序列長度視為 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() 的宏。 參數 start, stopstep 會被多被求值。

3.6.1 版后已移除: 如果 Py_LIMITED_API 設置為小于 0x030504000x030600000x03060100 之間的值(不包括邊界)則 PySlice_GetIndicesEx() 為已棄用的函數。

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

從切片對象中將 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

3.6.1 新版功能.

Py_ssize_t PySlice_AdjustIndices(Py_ssize_t?length, Py_ssize_t?*start, Py_ssize_t?*stop, Py_ssize_t?step)?

將 start/end 切片索引號根據指定的序列長度進行調整。 超出范圍的索引號會以與普通切片一致的方式進行剪切。

返回切片的長度。 此操作總是會成功。 不會調用 Python 代碼。

3.6.1 新版功能.

Ellipsis 對象?

PyObject *Py_Ellipsis?

Python 的 Ellipsis 對象。 該對象沒有任何方法。 它必須以與任何其他對象一樣的方式遵循引用計數。 它與 Py_None 一樣是單例對象。