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

PyTypeObject PySlice_Type
次に属します: Stable ABI.

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

int PySlice_Check(PyObject *ob)

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

PyObject *PySlice_New(PyObject *start, PyObject *stop, PyObject *step)
戻り値: 新しい参照。 次に属します: 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)
次に属します: Stable 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)
次に属します: Stable ABI.

PySlice_GetIndices() の実用的な代替です。 長さ length のシーケンスを仮定し、スライスオブジェクト slice から start、stop、step のインデックスを取得して、スライスの長さを slicelength に格納します。 範囲外のインデックスは、通常のスライスの処理と同じ方法で範囲内に収めます。 length は負であってはいけません。

成功した場合は 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)
次に属します: Stable 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)
次に属します: Stable ABI (バージョン 3.7 より).

指定された長さのシーケンスを仮定し、スライスの開始と終了のインデックスを調整します。 範囲外のインデックスは、通常のスライスの処理と同じ方法で範囲内に収めます。

length は負であってはいけません。 step はゼロでも -PY_SSIZE_T_MAX 未満でもいけません。 PySlice_Unpack() の結果はこれらの step の条件を満たします。

スライスの長さを返します。 常に成功し、Python コードを呼び出しません。

Added in version 3.6.1.

Ellipsis オブジェクト

PyTypeObject PyEllipsis_Type
次に属します: Stable ABI.

Python の Ellipsis オブジェクトの型です。 Python レベルの types.EllipsisType と同じです。

PyObject *Py_Ellipsis

Python の Ellipsis オブジェクト。このオブジェクトにはメソッドがありません。 Py_None と同様、これは immortal でシングルトンなオブジェクトです。

バージョン 3.12 で変更: Py_Ellipsis は immortal です。