Set Objects

Dieser Abschnitt beschreibt die öffentliche API für set und frozenset Objekte. Jegliche Funktionalität, die hier nicht aufgeführt ist, wird am besten entweder über das abstrakte Objektprotokoll (einschließlich PyObject_CallMethod(), PyObject_RichCompareBool(), PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(), PyObject_Print() und PyObject_GetIter()) oder das abstrakte Zahlenprotokoll (einschließlich PyNumber_And(), PyNumber_Subtract(), PyNumber_Or(), PyNumber_Xor(), PyNumber_InPlaceAnd(), PyNumber_InPlaceSubtract(), PyNumber_InPlaceOr() und PyNumber_InPlaceXor()) angesprochen.

type PySetObject

Dieser Untertyp von PyObject wird verwendet, um die internen Daten für set und frozenset Objekte zu speichern. Er ähnelt einem PyDictObject in dem Sinne, dass er für kleine Sets eine feste Größe hat (ähnlich der Tupelspeicherung) und für mittelgroße und große Sets auf einen separaten, variabel großen Speicherblock zeigt (ähnlich der Listen dalloberfläche). Keines der Felder dieser Struktur sollte als öffentlich betrachtet werden und alle können sich ändern. Der gesamte Zugriff sollte über die dokumentierte API erfolgen und nicht durch Manipulation der Werte in der Struktur.

PyTypeObject PySet_Type
Teil der Stable ABI.

Dies ist eine Instanz von PyTypeObject, die den Python set-Typ repräsentiert.

PyTypeObject PyFrozenSet_Type
Teil der Stable ABI.

Dies ist eine Instanz von PyTypeObject, die den Python frozenset-Typ repräsentiert.

Die folgenden Typprüfmakros funktionieren auf Zeigern zu beliebigen Python-Objekten. Ebenso arbeiten die Konstruktorfunktionen mit jedem iterierbaren Python-Objekt.

int PySet_Check(PyObject *p)

Gibt wahr zurück, wenn p ein set-Objekt oder eine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.

int PyFrozenSet_Check(PyObject *p)

Gibt wahr zurück, wenn p ein frozenset-Objekt oder eine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.

int PyAnySet_Check(PyObject *p)

Gibt wahr zurück, wenn p ein set-Objekt, ein frozenset-Objekt oder eine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.

int PySet_CheckExact(PyObject *p)

Gibt wahr zurück, wenn p ein set-Objekt, aber keine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.

Hinzugefügt in Version 3.10.

int PyAnySet_CheckExact(PyObject *p)

Gibt wahr zurück, wenn p ein set-Objekt oder ein frozenset-Objekt, aber keine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.

int PyFrozenSet_CheckExact(PyObject *p)

Gibt wahr zurück, wenn p ein frozenset-Objekt, aber keine Instanz eines Subtyps ist. Diese Funktion ist immer erfolgreich.

PyObject *PySet_New(PyObject *iterable)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt ein neues set zurück, das die vom iterable zurückgegebenen Objekte enthält. Der iterable kann NULL sein, um ein neues leeres Set zu erstellen. Gibt das neue Set im Erfolgsfall oder NULL im Fehlerfall zurück. Löst TypeError aus, wenn iterable nicht tatsächlich iterierbar ist. Der Konstruktor ist auch nützlich zum Kopieren eines Sets (c=set(s)).

PyObject *PyFrozenSet_New(PyObject *iterable)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt ein neues frozenset zurück, das die vom iterable zurückgegebenen Objekte enthält. Der iterable kann NULL sein, um ein neues leeres Frozenset zu erstellen. Gibt das neue Set im Erfolgsfall oder NULL im Fehlerfall zurück. Löst TypeError aus, wenn iterable nicht tatsächlich iterierbar ist.

Die folgenden Funktionen und Makros sind für Instanzen von set oder frozenset oder Instanzen ihrer Subtypen verfügbar.

Py_ssize_t PySet_Size(PyObject *anyset)
Teil der Stable ABI.

Gibt die Länge eines set- oder frozenset-Objekts zurück. Entspricht len(anyset). Löst SystemError aus, wenn anyset kein set, frozenset oder eine Instanz eines Subtyps ist.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

Makroform von PySet_Size() ohne Fehlerprüfung.

int PySet_Contains(PyObject *anyset, PyObject *key)
Teil der Stable ABI.

Gibt 1 zurück, wenn gefunden, 0, wenn nicht gefunden, und -1, wenn ein Fehler auftritt. Im Gegensatz zur Python-Methode __contains__() konvertiert diese Funktion unveränderbare Sets nicht automatisch in temporäre Frozensets. Löst TypeError aus, wenn der key unveränderbar ist. Löst SystemError aus, wenn anyset kein set, frozenset oder eine Instanz eines Subtyps ist.

int PySet_Add(PyObject *set, PyObject *key)
Teil der Stable ABI.

Fügt key zu einer set-Instanz hinzu. Funktioniert auch mit frozenset-Instanzen (wie PyTuple_SetItem() kann es verwendet werden, um die Werte brandneuer Frozensets zu befüllen, bevor sie anderen Code ausgesetzt werden). Gibt 0 im Erfolgsfall oder -1 im Fehlerfall zurück. Löst TypeError aus, wenn key unveränderbar ist. Löst MemoryError aus, wenn kein Platz zum Wachsen vorhanden ist. Löst SystemError aus, wenn set keine Instanz von set oder dessen Subtyp ist.

Die folgenden Funktionen sind für Instanzen von set oder deren Subtypen verfügbar, jedoch nicht für Instanzen von frozenset oder deren Subtypen.

int PySet_Discard(PyObject *set, PyObject *key)
Teil der Stable ABI.

Gibt 1 zurück, wenn gefunden und entfernt, 0, wenn nicht gefunden (keine Aktion ausgeführt), und -1, wenn ein Fehler auftritt. Löst bei fehlenden Schlüsseln keine KeyError aus. Löst TypeError aus, wenn der key unveränderbar ist. Im Gegensatz zur Python-Methode discard() konvertiert diese Funktion unveränderbare Sets nicht automatisch in temporäre Frozensets. Löst SystemError aus, wenn set keine Instanz von set oder dessen Subtyp ist.

PyObject *PySet_Pop(PyObject *set)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt eine neue Referenz auf ein beliebiges Objekt im set zurück und entfernt das Objekt aus dem set. Gibt NULL im Fehlerfall zurück. Löst KeyError aus, wenn das Set leer ist. Löst SystemError aus, wenn set keine Instanz von set oder dessen Subtyp ist.

int PySet_Clear(PyObject *set)
Teil der Stable ABI.

Leert ein bestehendes Set von allen Elementen. Gibt 0 im Erfolgsfall zurück. Gibt -1 zurück und löst SystemError aus, wenn set keine Instanz von set oder dessen Subtyp ist.