Набір об’єктів¶
У цьому розділі детально описано публічний API для об’єктів set
і frozenset
. Будь-які функції, не перелічені нижче, найкраще отримати доступ за допомогою протоколу абстрактних об’єктів (включно з 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
тим, що він має фіксований розмір для невеликих наборів (подібно до сховища кортежів) і вказуватиме на окремий блок пам’яті змінного розміру для середніх і великих наборів (подібно списку зберігання). Жодне з полів цієї структури не можна вважати відкритим, і всі можуть бути змінені. Весь доступ має здійснюватися через задокументований API, а не шляхом маніпулювання значеннями в структурі.
-
PyTypeObject
PySet_Type
¶ Це екземпляр
PyTypeObject
, що представляє типset
Python.
-
PyTypeObject
PyFrozenSet_Type
¶ Це екземпляр
PyTypeObject
, що представляє типfrozenset
Python.
Наступні макроси перевірки типу працюють з покажчиками на будь-який об’єкт Python. Подібним чином функції конструктора працюють з будь-яким ітерованим об’єктом Python.
-
int
PySet_Check
(PyObject *p)¶ Повертає true, якщо p є об’єктом
set
або екземпляром підтипу. Ця функція завжди успішна.
-
int
PyFrozenSet_Check
(PyObject *p)¶ Повертає true, якщо p є об’єктом
frozenset
або екземпляром підтипу. Ця функція завжди успішна.
-
int
PyAnySet_Check
(PyObject *p)¶ Повертає true, якщо p є об’єктом
set
, об’єктомfrozenset
або екземпляром підтипу. Ця функція завжди успішна.
-
int
PyAnySet_CheckExact
(PyObject *p)¶ Повертає true, якщо p є об’єктом
set
або об’єктомfrozenset
, але не екземпляром підтипу. Ця функція завжди успішна.
-
int
PyFrozenSet_CheckExact
(PyObject *p)¶ Повертає true, якщо p є об’єктом
frozenset
, але не є екземпляром підтипу. Ця функція завжди успішна.
-
PyObject*
PySet_New
(PyObject *iterable)¶ - Return value: New reference.
Повертає новий
set
, що містить об’єкти, повернуті iterable. Iterable може бутиNULL
для створення нового порожнього набору. Повертає новий набір у разі успіху абоNULL
у разі невдачі. ВикликатиTypeError
, якщо iterable насправді не можна ітерувати. Конструктор також корисний для копіювання набору (c=set(s)
).
-
PyObject*
PyFrozenSet_New
(PyObject *iterable)¶ - Return value: New reference.
Повертає новий
frozenset
, що містить об’єкти, повернуті iterable. Iterable може бутиNULL
для створення нового порожнього замороженого набору. Повертає новий набір у разі успіху абоNULL
у разі невдачі. ВикликатиTypeError
, якщо iterable насправді не можна ітерувати.
Наступні функції та макроси доступні для екземплярів set
або frozenset
або екземплярів їхніх підтипів.
-
Py_ssize_t
PySet_Size
(PyObject *anyset)¶ Return the length of a
set
orfrozenset
object. Equivalent tolen(anyset)
. Raises aPyExc_SystemError
if anyset is not aset
,frozenset
, or an instance of a subtype.
-
Py_ssize_t
PySet_GET_SIZE
(PyObject *anyset)¶ Макроформа
PySet_Size()
без перевірки помилок.
-
int
PySet_Contains
(PyObject *anyset, PyObject *key)¶ Return
1
if found,0
if not found, and-1
if an error is encountered. Unlike the Python__contains__()
method, this function does not automatically convert unhashable sets into temporary frozensets. Raise aTypeError
if the key is unhashable. RaisePyExc_SystemError
if anyset is not aset
,frozenset
, or an instance of a subtype.
-
int
PySet_Add
(PyObject *set, PyObject *key)¶ Додайте key до екземпляра
set
. Також працює з екземплярамиfrozenset
(наприклад,PyTuple_SetItem()
, його можна використовувати для заповнення значень абсолютно нових заморожених наборів перед тим, як вони будуть представлені в іншому коді). Повертає0
у разі успіху або-1
у разі невдачі. ВикликатиTypeError
, якщо ключ не хешується. ВикликайтеMemoryError
, якщо немає місця для зростання. ВикликатиSystemError
, якщо set не є екземпляромset
або його підтипу.
Наступні функції доступні для екземплярів set
або його підтипів, але не для екземплярів frozenset
або його підтипів.
-
int
PySet_Discard
(PyObject *set, PyObject *key)¶ Return
1
if found and removed,0
if not found (no action taken), and-1
if an error is encountered. Does not raiseKeyError
for missing keys. Raise aTypeError
if the key is unhashable. Unlike the Pythondiscard()
method, this function does not automatically convert unhashable sets into temporary frozensets. RaisePyExc_SystemError
if set is not an instance ofset
or its subtype.