Set オブジェクト¶
バージョン 2.5 で追加.
このセクションでは 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を送出します。バージョン 2.6 で変更: 完全に新しい
frozensetオブジェクトを返すことが保証されるようになりました。以前は、大きさがゼロの frozenset はシングルトンでした。これによりまっさらな frozenset からPySet_Add()を使って組み立てることが出来ます。
以降の関数やマクロは、 set と frozenset とそのサブタイプのインスタンスに対して利用できます。
-
Py_ssize_t
PySet_Size(PyObject *anyset)¶ setやfrozensetのオブジェクトの長さを返します。len(anyset)と同じです。 anyset がset、frozenset及びそのサブタイプのオブジェクトで無い場合は、PyExc_SystemErrorを送出します。バージョン 2.5 で変更: この関数は以前は
intを返していました。この変更により、 64 bit システムを正しくサポートするには修正が必要になります。
-
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のインスタンスに使わないで下さい。成功したら0を、失敗したら-1を返します。 key がハッシュ可能でないなら、TypeErrorを送出します。 set を大きくする余裕が無い場合は、MemoryErrorを送出します。 set がsetとそのサブタイプのインスタンスで無い場合は、SystemErrorを送出します。バージョン 2.6 で変更:
frozensetやそのサブタイプのインスタンスに対して利用できるようになりました。PyTuple_SetItem()のように、新しい frozenset を他のコードに渡すまえに内容を追加するためのに使うことができます。
以降の関数は、 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を送出します。
