# スライスオブジェクト (slice object)

PyTypeObject PySlice_Type
  Part of the Stable ABI.

  スライスオブジェクトの型オブジェクトです。これは、Pythonレイヤにおける `slice` と同じオブジェクトです。

int PySlice_Check(PyObject *ob)

  ob がスライスオブジェクトの場合に真を返します; ob は `NULL` であってはなりません。この関数は常に成功します。

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
  Return value: New reference. Part of the Stable 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)
  Part of the Stable ABI.

  スライスオブジェクト slice における start, stop, および step のインデクス値を取得します。このときシーケンスの長さを length と仮定します。length よりも大きなインデクスになるとエラーとして扱います。

  Returns `0` on success and `-1` on error with no exception set (unless one of the indices was not `None` and failed to be converted to an integer, in which case `-1` is returned with an exception set).

  おそらく、あなたはこの関数を使いたくないでしょう。

  バージョン 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)
  Part of the Stable ABI.

  `PySlice_GetIndices()` の便利な代替です。 slice における、start, stop および step のインデクス値を取得をします。シーケンスの長さを length 、スライスの長さを slicelength に格納します。境界外のインデクスは通常のスライスと一貫した方法でクリップされます。

  成功のときには `0` を、エラーのときには例外をセットして `-1` を返します。

  注釈

  This function is considered not safe for resizable sequences. Its invocation should be replaced by a combination of `PySlice_Unpack()` and `PySlice_AdjustIndices()` where

      if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
          // return error
      }

  is replaced by

      if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
          // return error
      }
      slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

  バージョン 3.2 で変更: 以前は、slice 引数の型は `PySliceObject*` でした。

  バージョン 3.6.1 で変更: If `Py_LIMITED_API` is not set or set to the value between `0x03050400` and `0x03060000` (not including) or `0x03060100` or higher `PySlice_GetIndicesEx()` is implemented as a macro using `PySlice_Unpack()` and `PySlice_AdjustIndices()`. Arguments start, stop and step are evaluated more than once.

  バージョン 3.6.1 で非推奨: If `Py_LIMITED_API` is set to the value less than `0x03050400` or between `0x03060000` and `0x03060100` (not including) `PySlice_GetIndicesEx()` is a deprecated function.

int PySlice_Unpack(PyObject *slice, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
  Part of the Stable ABI since version 3.7.

  Extract the start, stop and step data members from a slice object as C integers. Silently reduce values larger than `PY_SSIZE_T_MAX` to `PY_SSIZE_T_MAX`, silently boost the start and stop values less than `PY_SSIZE_T_MIN` to `PY_SSIZE_T_MIN`, and silently boost the step values less than `-PY_SSIZE_T_MAX` to `-PY_SSIZE_T_MAX`.

  Return `-1` on error, `0` on success.

  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)
  Part of the Stable ABI since version 3.7.

  Adjust start/end slice indices assuming a sequence of the specified length. Out of bounds indices are clipped in a manner consistent with the handling of normal slices.

  Return the length of the slice. Always successful. Doesn't call Python code.

  Added in version 3.6.1.

## Ellipsis オブジェクト

PyObject *Py_Ellipsis

  The Python `Ellipsis` object. This object has no methods. Like `Py_None`, it is an immortal. singleton object.

  バージョン 3.12 で変更: `Py_Ellipsis` is immortal.