Набір об’єктів

У цьому розділі детально описано публічний 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 or frozenset object. Equivalent to len(anyset). Raises a PyExc_SystemError if anyset is not a set, 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 a TypeError if the key is unhashable. Raise PyExc_SystemError if anyset is not a set, 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 raise KeyError for missing keys. Raise a TypeError if the key is unhashable. Unlike the Python discard() method, this function does not automatically convert unhashable sets into temporary frozensets. Raise PyExc_SystemError if set is not an instance of set or its subtype.

PyObject* PySet_Pop(PyObject *set)
Return value: New reference.

Повертає нове посилання на довільний об’єкт у set та видаляє об’єкт із set. Повертає NULL у разі помилки. Викликати KeyError, якщо набір порожній. Викликати SystemError, якщо set не є екземпляром set або його підтипу.

int PySet_Clear(PyObject *set)

Empty an existing set of all elements.