Set オブジェクト

このセクションでは setfrozenset の公開 API について詳しく述べます。以降で説明していない機能は、抽象オブジェクトプロトコル (PyObject_CallMethod(), PyObject_RichCompareBool(), PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(), PyObject_Print(), PyObject_GetIter() を含む) か抽象数値プロトコル (PyNumber_And(), PyNumber_Subtract(), PyNumber_Or(), PyNumber_Xor(), PyNumber_InPlaceAnd(), PyNumber_InPlaceSubtract(), PyNumber_InPlaceOr(), PyNumber_InPlaceXor() を含む) を使って利用できます。

PySetObject

この PyObject を継承した型は、 setfrozenset 両方の内部データを保存するのに用いられます。 PyDictObject と同じように、小さい集合(set)に対しては(タプルのように)固定サイズであり、そうでない集合に対しては(リストと同じように)可変長のメモリブロックを用います。この構造体のどのフィールドも、非公開で変更される可能性があると考えて下さい。すべてのアクセスは、構造体の中の値を直接操作するのではなく、ドキュメントされた API を用いて行うべきです。

PyTypeObject PySet_Type

この PyTypeObject のインスタンスは、Python の set 型を表します。

PyTypeObject PyFrozenSet_Type

この PyTypeObject のインスタンスは、Python の frozenset 型を表します。

以降の型チェックマクロはすべての Python オブジェクトに対するポインタに対して動作します。同様に、コンストラクタはすべてのイテレート可能な Python オブジェクトに対して動作します。

int PySet_Check(PyObject *p)

pset かそのサブタイプのオブジェクトであるときに true を返します。

int PyFrozenSet_Check(PyObject *p)

pfrozenset かそのサブタイプのオブジェクトであるときに true を返します。

int PyAnySet_Check(PyObject *p)

psetfrozenset 、あるいはそのサブタイプのオブジェクトであれば、true を返します。

int PyAnySet_CheckExact(PyObject *p)

psetfrozenset のどちらかのオブジェクトであるときに true を返します。サブタイプのオブジェクトは含みません。

int PyFrozenSet_CheckExact(PyObject *p)

pfrozenset のオブジェクトであるときに true を返します。サブタイプのオブジェクトは含みません。

PyObject* PySet_New(PyObject *iterable)
Return value: New reference.

iterable が返すオブジェクトを含む新しい set を返します。 iterableNULL のときは、空の set を返します。 成功したら新しい set を、失敗したら NULL を返します。 iterable がイテレート可能でない場合は、 TypeError を送出します。 このコンストラクタは set をコピーするときにも使えます (c=set(s))。

PyObject* PyFrozenSet_New(PyObject *iterable)
Return value: New reference.

iterable が返すオブジェクトを含む新しい frozenset を返します。 iterableNULL のときは、空の frozenset を返します。 成功時には新しい set を、失敗時には NULL を返します。 iterable がイテレート可能でない場合は、 TypeError を送出します。

以降の関数やマクロは、 setfrozenset とそのサブタイプのインスタンスに対して利用できます。

Py_ssize_t PySet_Size(PyObject *anyset)

setfrozenset のオブジェクトの長さを返します。 len(anyset) と同じです。 anysetsetfrozenset およびそのサブタイプのオブジェクトでない場合は、 PyExc_SystemError を送出します。

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

エラーチェックを行わない、 PySet_Size() のマクロ形式。

int PySet_Contains(PyObject *anyset, PyObject *key)

見つかったら 1 を、見つからなかったら 0 を、エラーが発生した場合は -1 を返します。 Python の __contains__() メソッドと違って、この関数は非ハッシュ set を一時的な frozenset に自動で変換しません。 key がハッシュ可能で無い場合、 TypeError を送出します。 anysetset, frozenset 及びそのサブタイプのオブジェクトで無い場合は PyExc_SystemError を送出します。

int PySet_Add(PyObject *set, PyObject *key)

set のインスタンスに key を追加します。 frozenset に対しても動作します (PyTuple_SetItem() のように、他のコードに見える前の新しい frozenset の値を埋めるために使用できます)。 成功したら 0 を、失敗したら -1 を返します。 key がハッシュ可能でない場合は、 TypeError を送出します。 set を大きくする余裕がない場合は、 MemoryError を送出します。 setset かそのサブタイプのインスタンスでない場合は、 SystemError を送出します。

以降の関数は、 set とそのサブタイプに対して利用可能です。 frozenset とそのサブタイプには利用できません。

int PySet_Discard(PyObject *set, PyObject *key)

key が見つかって、値を削除したら 1 を返します。 見つからなかったら (何もせずに) 0 を返します。 エラーが発生した場合は -1 を返します。 key が無くても KeyError を送出しません。 key がハッシュ可能でない場合は TypeError を送出します。 Python の discard() メソッドと違って、この関数は非ハッシュ set を一時的な frozenset に変換しません。 setset かそのサブタイプのインスタンスでないときは、 PyExc_SystemError を送出します。

PyObject* PySet_Pop(PyObject *set)
Return value: New reference.

set の中の要素のどれかに対する新しい参照を返し、そのオブジェクトを set から削除します。 失敗したら NULL を返します。 set が空の場合には KeyError を送出します。 setset とそのサブタイプのインスタンスでない場合は、 SystemError を送出します。

int PySet_Clear(PyObject *set)

set を空にします。

int PySet_ClearFreeList()

free list をクリアします。解放された要素数を返します。

バージョン 3.3 で追加.