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

PyTypeObject PySlice_Type

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

int PySlice_Check(PyObject *ob)

Return true if ob is a slice object; ob must not be NULL. This function always succeeds.

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

指定した値から新たなスライスオブジェクトを返します。パラメタ 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)

スライスオブジェクト 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 における、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)

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.

バージョン 3.6.1 で追加.

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

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.

バージョン 3.6.1 で追加.

Ellipsis オブジェクト

PyObject *Py_Ellipsis

Python における Ellipsis オブジェクトです。 このオブジェクトはメソッドを持ちません。 参照カウントの点では、他のオブジェクトと同様に扱う必要があります。 Py_None のように、これもシングルトンオブジェクトです。