Αντικείμενα Set

Αυτή η ενότητα περιγράφει το δημόσιο 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()).

type PySetObject

Αυτός ο υποτύπος του PyObject χρησιμοποιείται για την αποθήκευση των εσωτερικών δεδομένων τόσο για τα αντικείμενα set όσο και για τα αντικείμενα frozenset. Μοιάζει με το PyDictObject στο ότι έχει σταθερό μέγεθος για μικρά set (παρόμοια με την αποθήκευση tuple) και δείχνει σε ένα ξεχωριστό, μεταβλητού μεγέθους μπλοκ μνήμης για μεσαία και μεγάλα set (παρόμοια με την αποθήκευση list). Κανένα από τα πεδία αυτής της δομής δεν θεωρείται δημόσιο και όλα υπόκεινται σε αλλαγές. Κάθε πρόσβαση πρέπει να γίνεται μέσω του τεκμηριωμένου API και όχι μέσω απευθείας τροποποίησης των τιμών της δομής.

PyTypeObject PySet_Type
Μέρος του Σταθερό ABI.

Αυτό είναι ένα στιγμιότυπο του PyTypeObject που αντιπροσωπεύει τον τύπο set της Python.

PyTypeObject PyFrozenSet_Type
Μέρος του Σταθερό ABI.

Αυτό είναι ένα στιγμιότυπο του PyTypeObject που αντιπροσωπεύει τον τύπο frozenset της Python.

Οι παρακάτω μακροεντολές ελέγχου τύπου λειτουργούν σε δείκτες προς οποιοδήποτε αντικείμενο Python. Ομοίως, οι συναρτήσεις constructor λειτουργούν με οποιοδήποτε επαναλήψιμο αντικείμενο 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 PySet_CheckExact(PyObject *p)

Επιστρέφει true αν το p είναι αντικείμενο set αλλά όχι στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

Added in version 3.10.

int PyAnySet_CheckExact(PyObject *p)

Επιστρέφει true αν το p είναι αντικείμενο set ή αντικείμενο frozenset, αλλά όχι στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

int PyFrozenSet_CheckExact(PyObject *p)

Επιστρέφει true αν το p είναι αντικείμενο frozenset, αλλά όχι στιγμιότυπο υποτύπου. Η συνάρτηση αυτή επιτυγχάνει πάντα.

PyObject *PySet_New(PyObject *iterable)
Επιστρεφόμενη τιμή: New reference. Μέρος του Σταθερό ABI. Thread safety: Safe for concurrent use on the same object.

Επιστρέφει ένα νέο set, το οποίο περιέχει αντικείμενα που επιστρέφονται από το iterable. Το iterable μπορεί να είναι NULL για τη δημιουργία νέου κενού set. Επιστρέφει το νέο set σε περίπτωση επιτυχίας ή NULL σε περίπτωση αποτυχίας. Εγείρει TypeError αν το iterable δεν είναι στην πραγματικότητα επαναλήψιμο. Ο constructor είναι επίσης χρήσιμος για την αντιγραφή ενός set (c=set(s)).

Σημείωση

The operation is atomic on free threading when iterable is a set, frozenset or dict.

PyObject *PyFrozenSet_New(PyObject *iterable)
Επιστρεφόμενη τιμή: New reference. Μέρος του Σταθερό ABI. Thread safety: Safe for concurrent use on the same object.

Επιστρέφει ένα νέο frozenset, το οποίο περιέχει αντικείμενα που επιστρέφει το iterable. Το iterable μπορεί να είναι NULL για τη δημιουργία νέου κενού frozenset. Επιστρέφει το νέο set σε περίπτωση επιτυχίας ή NULL σε περίπτωση αποτυχίας. Εγείρει TypeError, αν το iterable δεν είναι στην πραγματικότητα επαναλήψιμο.

Σημείωση

The operation is atomic on free threading when iterable is a set, frozenset or dict.

Οι παρακάτω συναρτήσεις και μακροεντολές είναι διαθέσιμες για στιγμιότυπα των set ή frozenset ή στιγμιότυπα των υποτύπων τους.

Py_ssize_t PySet_Size(PyObject *anyset)
Μέρος του Σταθερό ABI. Thread safety: Atomic.

Επιστρέφει το μήκος ενός αντικειμένου set ή frozenset. Ισοδυναμεί με το len(anyset). Εγείρει SystemError αν το anyset δεν είναι set, frozenset ή στιγμιότυπο υποτύπου.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)
Thread safety: Atomic.

Μορφή μακροεντολής της PySet_Size() χωρίς έλεγχο σφαλμάτων.

int PySet_Contains(PyObject *anyset, PyObject *key)
Μέρος του Σταθερό ABI. Thread safety: Safe for concurrent use on the same object.

Επιστρέφει 1 αν βρεθεί, 0 αν δεν βρεθεί και -1 αν προκύψει σφάλμα. Σε αντίθεση με τη μέθοδο __contains__() της Python, αυτή η συνάρτηση δεν μετατρέπει αυτόματα μη κατακερματίσιμα set σε προσωρινά frozenset. Εγείρει TypeError, αν το key είναι μη κατακερματίσιμο. Εγείρει SystemError, αν το anyset δεν είναι set, frozenset ή στιγμιότυπο υποτύπου.

Σημείωση

The operation is atomic on free threading when key is str, int, float, bool or bytes.

int PySet_Add(PyObject *set, PyObject *key)
Μέρος του Σταθερό ABI. Thread safety: Safe for concurrent use on the same object.

Προσθέτει το key σε ένα στιγμιότυπο set. Λειτουργεί επίσης με στιγμιότυπα frozenset (όπως η PyTuple_SetItem(), μπορεί να χρησιμοποιηθεί για τη συμπλήρωση των τιμών ολοκαίνουριων frozenset πριν εκτεθούν σε άλλο κώδικα). Επιστρέφει 0 σε περίπτωση επιτυχίας ή -1 σε περίπτωση αποτυχίας. Εγείρει TypeError, αν το key είναι μη κατακερματίσιμο. Εγείρει MemoryError, αν δεν υπάρχει χώρος για επέκταση. Εγείρει SystemError, αν το set δεν είναι στιγμιότυπο του set ή υποτύπου του.

Σημείωση

The operation is atomic on free threading when key is str, int, float, bool or bytes.

Οι παρακάτω συναρτήσεις είναι διαθέσιμες για στιγμιότυπα του set ή των υποτύπων του, αλλά όχι για στιγμιότυπα του frozenset ή των υποτύπων του.

int PySet_Discard(PyObject *set, PyObject *key)
Μέρος του Σταθερό ABI. Thread safety: Safe for concurrent use on the same object.

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 SystemError if set is not an instance of set or its subtype.

Σημείωση

The operation is atomic on free threading when key is str, int, float, bool or bytes.

PyObject *PySet_Pop(PyObject *set)
Επιστρεφόμενη τιμή: New reference. Μέρος του Σταθερό ABI. Thread safety: Atomic.

Επιστρέφει μια νέα αναφορά σε ένα τυχαίο αντικείμενο του set και αφαιρεί το αντικείμενο από το set. Επιστρέφει NULL σε περίπτωση αποτυχίας. Εγείρει KeyError, αν το set είναι κενό. Εγείρει SystemError αν το set δεν είναι στιγμιότυπο του set ή υποτύπου του.

int PySet_Clear(PyObject *set)
Μέρος του Σταθερό ABI. Thread safety: Atomic.

Αδειάζει ένα υπάρχον set από όλα τα στοιχεία του. Επιστρέφει 0 σε περίπτωση επιτυχίας. Επιστρέφει -1 και εγείρει SystemError, αν το set δεν είναι στιγμιότυπο του set ή υποτύπου του.

Σημείωση

In the free-threaded build, the set is emptied before its entries are cleared, so other threads will observe an empty set rather than intermediate states.

Deprecated API

PySet_MINSIZE

A constant representing the size of an internal preallocated table inside PySetObject instances.

This is documented solely for completeness, as there are no guarantees that a given version of CPython uses preallocated tables with a fixed size. In code that does not deal with unstable set internals, PySet_MINSIZE can be replaced with a small constant like 8.

If looking for the size of a set, use PySet_Size() instead.

Soft deprecated since version 3.14.