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
を送出します。