オブジェクトの設定
このセクションでは、 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 PySet_Check(PyObject *p)
- p が set オブジェクトまたはサブタイプのインスタンスである場合はtrueを返します。 この関数は常に成功します。
- int PyFrozenSet_Check(PyObject *p)
- p が frozenset オブジェクトまたはサブタイプのインスタンスである場合はtrueを返します。 この関数は常に成功します。
- 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)
)のコピーにも役立ちます。
- iterable によって返されたオブジェクトを含む新しい frozenset を返します。 iterable は、
NULL
で、新しい空のフリーズセットを作成できます。 成功した場合は新しいセットを返し、失敗した場合は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()のマクロ形式。
- 見つかった場合は
1
を返し、見つからなかった場合は0
を返し、エラーが発生した場合は-1
を返します。 Python__contains__()
メソッドとは異なり、この関数はハッシュ不可能なセットを一時的なフリーズセットに自動的に変換しません。 キーがハッシュできない場合は、 TypeError を発生させます。 anyset が set 、 frozenset 、またはサブタイプのインスタンスでない場合は、PyExc_SystemError
を上げます。
- キーをセットインスタンスに追加します。 フリーズセットインスタンスでも機能します( PyTuple_SetItem()のように、他のコードに公開される前に、新しいフリーズセットの値を入力するために使用できます)。 成功した場合は
0
を返し、失敗した場合は-1
を返します。 キーがハッシュできない場合は、 TypeError を発生させます。 拡大する余地がない場合は、 MemoryError を発生させます。 set が set またはそのサブタイプのインスタンスでない場合は、 SystemError を発生させます。
次の関数は、 set またはそのサブタイプのインスタンスで使用できますが、 frozenset またはそのサブタイプのインスタンスでは使用できません。
- 見つかって削除された場合は
1
を返し、見つからなかった場合(アクションは実行されない)は0
を返し、エラーが発生した場合は-1
を返します。 欠落しているキーに対して KeyError を発生させません。 キーがハッシュできない場合は、 TypeError を発生させます。 Pythondiscard()
メソッドとは異なり、この関数はハッシュ不可能なセットを一時的なフリーズセットに自動的に変換しません。 set が set またはそのサブタイプのインスタンスでない場合は、PyExc_SystemError
を上げます。
- set 内の任意のオブジェクトへの新しい参照を返し、 set からオブジェクトを削除します。 失敗した場合は
NULL
を返します。 セットが空の場合は、 KeyError を発生させます。 set が set またはそのサブタイプのインスタンスでない場合は、 SystemError を発生させます。
- int PySet_Clear(PyObject *set)
- すべての要素の既存のセットを空にします。