# 切片物件

PyTypeObject PySlice_Type
  為 穩定 ABI 的一部分.

  slice 物件的型別物件。這與 Python 層中的 `slice` 相同。

int PySlice_Check(PyObject *ob)

  如果 ob 是 slice 物件，則回傳 true；ob 不能是 `NULL` 。此函式永遠成功。

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
  回傳值：新的參照。 為 穩定 ABI 的一部分.

  以指定的值回傳一個新的切片物件。start、stop 及 step 參數會被用為同名的 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)
  為 穩定 ABI 的一部分.

  從 slice 物件 slice 讀取開始、停止和步進索引，假設序列長度為 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()`。從假設序列長度為 length 的 slice 物件 slice 擷取開始、停止和步長索引，並將 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 會被計算多次。

  在 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 版本開始.

  以 C 整數的形式從 slice 物件中抽取 start、stop 及 step 資料成員。將大於 `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`。

  成功時回傳 `0`，在失敗時回傳 `-1` 並設定例外。

  在 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 版本開始.

  假設序列長度為指定長度，調整開始/結束切片索引。超出範圍的索引會以與處理正常切片一致的方式切除。

  回傳切片的長度。永遠成功。不呼叫 Python 程式碼。

  在 3.6.1 版被加入.

## Ellipsis 物件

PyTypeObject PyEllipsis_Type
  為 穩定 ABI 的一部分.

  Python `Ellipsis` 物件的型別。與 Python 層中的 `types.EllipsisType` 相同。

PyObject *Py_Ellipsis

  Python `Ellipsis` 物件。這個物件沒有方法。就像 `Py_None` 一樣，它是一個 immortal 單一物件。

  在 3.12 版的變更: `Py_Ellipsis` 為不滅的 (immortal)。