オブジェクトの設定
バージョン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())。
- type PySetObject
- PyObject のこのサブタイプは、 set オブジェクトと frozenset オブジェクトの両方の内部データを保持するために使用されます。 PyDictObject に似ており、小さなセット(タプルストレージのように)の固定サイズであり、中規模および大サイズのセット(リストストレージのように)用の個別の可変サイズのメモリブロックを指します。 )。 この構造のどのフィールドも公開されていると見なされるべきではなく、変更される可能性があります。 すべてのアクセスは、構造内の値を操作するのではなく、文書化されたAPIを介して行う必要があります。
- PyTypeObject PySet_Type
- これは、Python set タイプを表す PyTypeObject のインスタンスです。
- PyTypeObject PyFrozenSet_Type
- これは、Python 凍結セットタイプを表す PyTypeObject のインスタンスです。
次の型チェックマクロは、任意のPythonオブジェクトへのポインターで機能します。 同様に、コンストラクター関数は、反復可能なPythonオブジェクトで機能します。
- int PyFrozenSet_Check(PyObject *p)
p が frozenset オブジェクトまたはサブタイプのインスタンスである場合はtrueを返します。
バージョン2.6の新機能。
- int PyAnySet_Check(PyObject *p)
- int PyAnySet_CheckExact(PyObject *p)
- int PyFrozenSet_CheckExact(PyObject *p)
- p が frozenset オブジェクトであるが、サブタイプのインスタンスではない場合はtrueを返します。
- iterable によって返されたオブジェクトを含む新しい set を返します。 iterable は NULL で、新しい空のセットを作成できます。 成功した場合は新しいセットを返し、失敗した場合は NULL を返します。 iterable が実際に反復可能でない場合は、
TypeError
を上げます。 コンストラクターは、セット(c=set(s)
)のコピーにも役立ちます。
- PyObject *PyFrozenSet_New(PyObject *iterable)
iterable によって返されたオブジェクトを含む新しい frozenset を返します。 iterable は NULL で、新しい空のフリーズセットを作成できます。 成功した場合は新しいセットを返し、失敗した場合は NULL を返します。 iterable が実際に反復可能でない場合は、
TypeError
を上げます。バージョン2.6で変更:新品の冷凍セットを返すことが保証されました。 以前は、長さがゼロのフリーズセットはシングルトンでした。 これは、
PySet_Add()
で新しいフリーズセットを構築する妨げになりました。
set または frozenset のインスタンス、またはそれらのサブタイプのインスタンスでは、次の関数とマクロを使用できます。
- Py_ssize_t PySet_Size(PyObject *anyset)
set または frozenset オブジェクトの長さを返します。
len(anyset)
と同等です。 anyset が set 、 frozenset 、またはサブタイプのインスタンスでない場合、PyExc_SystemError
を発生させます。バージョン2.5で変更:この関数は
int
を返しました。 これには、64ビットシステムを適切にサポートするためにコードの変更が必要になる場合があります。
- Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
- エラーチェックなしの PySet_Size()のマクロ形式。
- 見つかった場合は
1
を返し、見つからなかった場合は0
を返し、エラーが発生した場合は-1
を返します。 Python__contains__()
メソッドとは異なり、この関数はハッシュ不可能なセットを一時的なフリーズセットに自動的に変換しません。 キーがハッシュできない場合は、TypeError
を上げます。 anyset が set 、 frozenset 、またはサブタイプのインスタンスでない場合は、PyExc_SystemError
を上げます。
- int PySet_Add(PyObject *set, PyObject *key)
キーをセットインスタンスに追加します。 frozenset インスタンスには適用されません。 成功した場合は
0
を返し、失敗した場合は-1
を返します。 キーがハッシュできない場合は、TypeError
を上げます。 成長する余地がない場合は、MemoryError
を上げます。 set が set またはそのサブタイプのインスタンスでない場合は、SystemError
を発生させます。バージョン2.6で変更: frozenset またはそのサブタイプのインスタンスで動作するようになりました。 PyTuple_SetItem()と同様に、他のコードに公開される前に、新しいフリーズセットの値を入力するために使用できます。
次の関数は、 set またはそのサブタイプのインスタンスで使用できますが、 frozenset またはそのサブタイプのインスタンスでは使用できません。
- 見つかって削除された場合は
1
を返し、見つからなかった場合(アクションは実行されない)は0
を返し、エラーが発生した場合は-1
を返します。 欠落しているキーに対してKeyError
を発生させません。 キーがハッシュできない場合は、TypeError
を上げます。 Pythondiscard()
メソッドとは異なり、この関数はハッシュ不可能なセットを一時的なフリーズセットに自動的に変換しません。 set が set またはそのサブタイプのインスタンスでない場合は、PyExc_SystemError
を上げます。
- set 内の任意のオブジェクトへの新しい参照を返し、 set からオブジェクトを削除します。 失敗した場合は NULL を返します。 セットが空の場合は
KeyError
を上げます。 set が set またはそのサブタイプのインスタンスでない場合は、SystemError
を発生させます。
- int PySet_Clear(PyObject *set)
- すべての要素の既存のセットを空にします。