Objetos Conjunto

Esta sección detalla la API pública para objetos set y frozenset. Se puede acceder mejor a cualquier funcionalidad que no se enumere a continuación utilizando el protocolo de objeto abstracto (que incluye PyObject_CallMethod(), PyObject_RichCompareBool(), PyObject_Hash(), PyObject_Repr(), PyObject_IsTrue(), PyObject_Print(), y PyObject_GetIter()) o el protocolo de número abstracto (que incluye PyNumber_And(), PyNumber_Subtract(), PyNumber_Or(), PyNumber_Xor(), PyNumber_InPlaceAnd(), PyNumber_InPlaceSubtract(), PyNumber_InPlaceOr(), y PyNumber_InPlaceXor()).

PySetObject

Este subtipo de PyObject se utiliza para contener los datos internos de los objetos set y frozenset. Es como un PyDictObject en el sentido de que es un tamaño fijo para conjuntos pequeños (muy parecido al almacenamiento de tuplas) y apuntará a un bloque de memoria separado de tamaño variable para conjuntos de tamaño medio y grande (muy similar a la lista almacenamiento). Ninguno de los campos de esta estructura debe considerarse público y está sujeto a cambios. Todo el acceso debe hacerse a través de la API documentada en lugar de manipular los valores en la estructura.

PyTypeObject PySet_Type

Esta es una instancia de PyTypeObject que representa el tipo Python set.

PyTypeObject PyFrozenSet_Type

Esta es una instancia de PyTypeObject que representa el tipo Python frozenset.

Los siguientes macros de comprobación de tipos funcionan en punteros a cualquier objeto de Python. Del mismo modo, las funciones del constructor funcionan con cualquier objeto Python iterable.

int PySet_Check(PyObject *p)

Retorna verdadero si p es un objeto set o una instancia de un subtipo.

int PyFrozenSet_Check(PyObject *p)

Retorna verdadero si p es un objeto frozenset o una instancia de un subtipo.

int PyAnySet_Check(PyObject *p)

Retorna verdadero si p es un objeto set, un objeto frozenset, o una instancia de un subtipo.

int PyAnySet_CheckExact(PyObject *p)

Retorna verdadero si p es un objeto set o un objeto frozenset pero no una instancia de un subtipo.

int PyFrozenSet_CheckExact(PyObject *p)

Retorna verdadero si p es un objeto frozenset pero no una instancia de un subtipo.

PyObject* PySet_New(PyObject *iterable)
Return value: New reference.

Retorna un nuevo set que contiene objetos retornados por iterable. El iterable puede ser NULL para crear un nuevo conjunto vacío. Retorna el nuevo conjunto en caso de éxito o NULL en caso de error. Lanza TypeError si iterable no es realmente iterable. El constructor también es útil para copiar un conjunto (c=set(s)).

PyObject* PyFrozenSet_New(PyObject *iterable)
Return value: New reference.

Retorna un nuevo frozenset que contiene objetos retornados por iterable. El iterable puede ser NULL para crear un nuevo conjunto congelado vacío. Retorna el nuevo conjunto en caso de éxito o NULL en caso de error. Lanza TypeError si iterable no es realmente iterable.

Las siguientes funciones y macros están disponibles para instancias de set o frozenset o instancias de sus subtipos.

Py_ssize_t PySet_Size(PyObject *anyset)

Retorna la longitud de un objeto set o frozenset. Equivalente a len(anyset). Lanza un PyExc_SystemError si anyset no es set, frozenset, o una instancia de un subtipo.

Py_ssize_t PySet_GET_SIZE(PyObject *anyset)

Forma macro de PySet_Size() sin comprobación de errores.

int PySet_Contains(PyObject *anyset, PyObject *key)

Retorna 1 si se encuentra, 0 si no se encuentra y -1 si se encuentra un error. A diferencia del método Python __contains__(), esta función no convierte automáticamente conjuntos no compartibles en congelados temporales. Lanza un TypeError si la key no se puede compartir. Lanza PyExc_SystemError si anyset no es un set, frozenset, o una instancia de un subtipo.

int PySet_Add(PyObject *set, PyObject *key)

Agrega key a una instancia de set. También funciona con instancias frozenset (como PyTuple_SetItem() se puede usar para completar los valores de los frozensets nuevos antes de que estén expuestos a otro código). Retorna 0 en caso de éxito o -1 en caso de error. Lanza un TypeError si la key no se puede compartir. Lanza un MemoryError si no hay espacio para crecer. Lanza un SystemError si set no es una instancia de set o su subtipo.

Las siguientes funciones están disponibles para instancias de set o sus subtipos, pero no para instancias de frozenset o sus subtipos.

int PySet_Discard(PyObject *set, PyObject *key)

Retorna 1 si se encuentra y se elimina, 0 si no se encuentra (no se realiza ninguna acción) y -1 si se encuentra un error. No lanza KeyError por faltar claves. Lanza un TypeError si la key no se puede compartir. A diferencia del método Python discard(), esta función no convierte automáticamente conjuntos no compartibles en congelados temporales. Lanza PyExc_SystemError si set no es una instancia de set o su subtipo.

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

Retorna una nueva referencia a un objeto arbitrario en el set y elimina el objeto del set. Retorna NULL en caso de falla. Lanza KeyError si el conjunto está vacío. Lanza a SystemError si set no es una instancia de set o su subtipo.

int PySet_Clear(PyObject *set)

Vacía un conjunto existente de todos los elementos.

int PySet_ClearFreeList()

Borra la lista libre. Retorna el número total de artículos liberados.

Nuevo en la versión 3.3.