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() を含む) を使って利用できます。

type PySetObject

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

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

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

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

この 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 PySet_CheckExact(PyObject *p)

pset オブジェクトだがサブタイプのインスタンスでない場合に真を返します。この関数は常に成功します。

バージョン 3.10 で追加.

int PyAnySet_CheckExact(PyObject *p)

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

int PyFrozenSet_CheckExact(PyObject *p)

pfrozenset オブジェクトだがサブタイプのインスタンスでない場合に真を返します。この関数は常に成功します。

PyObject *PySet_New(PyObject *iterable)
戻り値: 新しい参照。 次に属します: Stable ABI.

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

PyObject *PyFrozenSet_New(PyObject *iterable)
戻り値: 新しい参照。 次に属します: Stable ABI.

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

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

Py_ssize_t PySet_Size(PyObject *anyset)
次に属します: Stable ABI.

Return the length of a set or frozenset object. Equivalent to len(anyset). Raises a SystemError if anyset is not a set, frozenset, or an instance of a subtype.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

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

int PySet_Contains(PyObject *anyset, PyObject *key)
次に属します: Stable ABI.

Return 1 if found, 0 if not found, and -1 if an error is encountered. Unlike the Python __contains__() method, this function does not automatically convert unhashable sets into temporary frozensets. Raise a TypeError if the key is unhashable. Raise SystemError if anyset is not a set, frozenset, or an instance of a subtype.

int PySet_Add(PyObject *set, PyObject *key)
次に属します: Stable ABI.

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

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

int PySet_Discard(PyObject *set, PyObject *key)
次に属します: Stable ABI.

Return 1 if found and removed, 0 if not found (no action taken), and -1 if an error is encountered. Does not raise KeyError for missing keys. Raise a TypeError if the key is unhashable. Unlike the Python discard() method, this function does not automatically convert unhashable sets into temporary frozensets. Raise SystemError if set is not an instance of set or its subtype.

PyObject *PySet_Pop(PyObject *set)
戻り値: 新しい参照。 次に属します: Stable ABI.

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

int PySet_Clear(PyObject *set)
次に属します: Stable ABI.

Empty an existing set of all elements. Return 0 on success. Return -1 and raise SystemError if set is not an instance of set or its subtype.