Set オブジェクト¶
このセクションでは set
と frozenset
の公開 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
を継承した型は、set
とfrozenset
両方の内部データを保存するのに用いられます。PyDictObject
と同じように、小さい集合(set)に対しては(タプルのように)固定サイズであり、そうでない集合に対しては(リストと同じように)可変長のメモリブロックを用います。この構造体のどのフィールドも、非公開で変更される可能性があると考えて下さい。すべてのアクセスは、構造体の中の値を直接操作するのではなく、ドキュメントされた API を用いて行うべきです。
-
PyTypeObject
PySet_Type
¶ この
PyTypeObject
のインスタンスは、Python のset
型を表します。
-
PyTypeObject
PyFrozenSet_Type
¶ この
PyTypeObject
のインスタンスは、Python のfrozenset
型を表します。
以降の型チェックマクロはすべての Python オブジェクトに対するポインタに対して動作します。同様に、コンストラクタはすべてのイテレート可能な Python オブジェクトに対して動作します。
-
int
PyAnySet_CheckExact
(PyObject *p)¶ p が
set
かfrozenset
のどちらかのオブジェクトであるときに true を返します。サブタイプのオブジェクトは含みません。
-
PyObject*
PySet_New
(PyObject *iterable)¶ - Return value: New reference.
iterable が返すオブジェクトを含む新しい
set
を返します。 iterable がNULL
のときは、空の set を返します。 成功したら新しい set を、失敗したらNULL
を返します。 iterable がイテレート可能でない場合は、TypeError
を送出します。 このコンストラクタは set をコピーするときにも使えます (c=set(s)
)。
-
PyObject*
PyFrozenSet_New
(PyObject *iterable)¶ - Return value: New reference.
iterable が返すオブジェクトを含む新しい
frozenset
を返します。 iterable がNULL
のときは、空の frozenset を返します。 成功時には新しい set を、失敗時にはNULL
を返します。 iterable がイテレート可能でない場合は、TypeError
を送出します。
以降の関数やマクロは、 set
と frozenset
とそのサブタイプのインスタンスに対して利用できます。
-
Py_ssize_t
PySet_Size
(PyObject *anyset)¶ set
やfrozenset
のオブジェクトの長さを返します。len(anyset)
と同じです。 anyset がset
、frozenset
およびそのサブタイプのオブジェクトでない場合は、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
を送出します。 anyset がset
,frozenset
及びそのサブタイプのオブジェクトで無い場合はPyExc_SystemError
を送出します。
-
int
PySet_Add
(PyObject *set, PyObject *key)¶ set
のインスタンスに key を追加します。frozenset
に対しても動作します (PyTuple_SetItem()
のように、他のコードに見える前の新しい frozenset の値を埋めるために使用できます)。 成功したら0
を、失敗したら-1
を返します。 key がハッシュ可能でない場合は、TypeError
を送出します。 set を大きくする余裕がない場合は、MemoryError
を送出します。 set がset
かそのサブタイプのインスタンスでない場合は、SystemError
を送出します。
以降の関数は、 set
とそのサブタイプに対して利用可能です。 frozenset
とそのサブタイプには利用できません。
-
int
PySet_Discard
(PyObject *set, PyObject *key)¶ key が見つかって、値を削除したら
1
を返します。 見つからなかったら (何もせずに)0
を返します。 エラーが発生した場合は-1
を返します。 key が無くてもKeyError
を送出しません。 key がハッシュ可能でない場合はTypeError
を送出します。 Python のdiscard()
メソッドと違って、この関数は非ハッシュ set を一時的な frozenset に変換しません。 set がset
かそのサブタイプのインスタンスでないときは、PyExc_SystemError
を送出します。
-
PyObject*
PySet_Pop
(PyObject *set)¶ - Return value: New reference.
set の中の要素のどれかに対する新しい参照を返し、そのオブジェクトを set から削除します。 失敗したら
NULL
を返します。 set が空の場合にはKeyError
を送出します。 set がset
とそのサブタイプのインスタンスでない場合は、SystemError
を送出します。
-
int
PySet_ClearFreeList
()¶ free list をクリアします。解放された要素数を返します。
バージョン 3.3 で追加.