Objetos Enteros

Todos los enteros se implementan como objetos enteros «largos» (long) de tamaño arbitrario.

En caso de error, la mayoría de las API PyLong_As* retornan (tipo de retorno) -1 que no se puede distinguir de un número. Use PyErr_Occurred() para desambiguar.

PyLongObject

Este subtipo de PyObject representa un objeto entero de Python.

PyTypeObject PyLong_Type

Esta instancia de PyTypeObject representa el tipo entero de Python. Este es el mismo objeto que int en la capa de Python.

int PyLong_Check(PyObject *p)

Retorna verdadero si su argumento es un PyLongObject o un subtipo de PyLongObject.

int PyLong_CheckExact(PyObject *p)

Retorna verdadero si su argumento es un PyLongObject, pero no un subtipo de PyLongObject.

PyObject* PyLong_FromLong(long v)
Return value: New reference.

Retorna un objeto PyLongObject nuevo desde v, o NULL en caso de error.

La implementación actual mantiene un arreglo de objetos enteros para todos los enteros entre -5 y 256, cuando crea un int en ese rango, en realidad solo obtiene una referencia al objeto existente. Por lo tanto, debería ser posible cambiar el valor de 1. Sospecho que el comportamiento de Python en este caso no está definido. :-)

PyObject* PyLong_FromUnsignedLong(unsigned long v)
Return value: New reference.

Retorna un objeto PyLongObject nuevo desde un C unsigned long, o NULL en caso de error.

PyObject* PyLong_FromSsize_t(Py_ssize_t v)
Return value: New reference.

Retorna un objeto PyLongObject nuevo desde un C Py_ssize_t, o NULL en caso de error.

PyObject* PyLong_FromSize_t(size_t v)
Return value: New reference.

Retorna un objeto PyLongObject nuevo desde un C size_t, o NULL en caso de error.

PyObject* PyLong_FromLongLong(long long v)
Return value: New reference.

Retorna un objeto PyLongObject nuevo desde un C long long, o NULL en caso de error.

PyObject* PyLong_FromUnsignedLongLong(unsigned long long v)
Return value: New reference.

Retorna un objeto PyLongObject nuevo desde un C unsigned long long, o NULL en caso de error.

PyObject* PyLong_FromDouble(double v)
Return value: New reference.

Retorna un nuevo objeto PyLongObject de la parte entera de v, o NULL en caso de error.

PyObject* PyLong_FromString(const char *str, char **pend, int base)
Return value: New reference.

Retorna un nuevo PyLongObject basado en el valor de cadena de caracteres en str, que se interpreta de acuerdo con la raíz en base. Si pend no es NULL, * pend apuntará al primer carácter en str que sigue a la representación del número. Si base es 0, str se interpreta utilizando la definición Literales enteros; en este caso, los ceros a la izquierda en un número decimal distinto de cero lanzan un ValueError. Si base no es 0, debe estar entre 2 y 36, inclusive. Se ignoran los espacios iniciales y los guiones bajos individuales después de un especificador base y entre dígitos. Si no hay dígitos, se lanzará ValueError.

PyObject* PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Return value: New reference.

Convert a sequence of Unicode digits to a Python integer value.

Deprecated since version 3.3, will be removed in version 3.10: Parte de la API de viejo estilo Py_UNICODE; por favor migrar para usar PyLong_FromUnicodeObject().

PyObject* PyLong_FromUnicodeObject(PyObject *u, int base)
Return value: New reference.

Convert a sequence of Unicode digits in the string u to a Python integer value.

Nuevo en la versión 3.3.

PyObject* PyLong_FromVoidPtr(void *p)
Return value: New reference.

Crea un entero de Python desde el puntero p. El valor del puntero se puede recuperar del valor resultante usando PyLong_AsVoidPtr().

long PyLong_AsLong(PyObject *obj)

Retorna una representación de C long de obj. Si obj no es una instancia de PyLongObject, primero llama a su método __index__() o __int__() (si está presente) para convertirlo en un PyLongObject.

Lanza OverflowError si el valor de obj está fuera de rango para un long.

Retorna -1 en caso de error. Use PyErr_Occurred() para desambiguar.

Distinto en la versión 3.8: Use __index__() si está disponible.

Obsoleto desde la versión 3.8: Usar __int__() está deprecado.

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)

Retorna una representación de C long de obj. Si obj no es una instancia de PyLongObject, primero llama a su método __index__() o __int__() (si está presente) para convertirlo en un PyLongObject.

Si el valor de obj es mayor que LONG_MAX o menor que LONG_MIN, establece *overflow * en ``1`` o ``-1``, respectivamente, y retorna ``-1``; de lo contrario, establece **overflow en 0. Si se produce alguna otra excepción, configura *overflow en 0 y retorna -1 como de costumbre.

Retorna -1 en caso de error. Use PyErr_Occurred() para desambiguar.

Distinto en la versión 3.8: Use __index__() si está disponible.

Obsoleto desde la versión 3.8: Usar __int__() está deprecado.

long long PyLong_AsLongLong(PyObject *obj)

Retorna una representación de C long long de obj. Si obj no es una instancia de PyLongObject, primero llama a su método __index__() o __int__() (si está presente) para convertirlo en un PyLongObject.

Lanza OverflowError si el valor de obj está fuera de rango para un long long.

Retorna -1 en caso de error. Use PyErr_Occurred() para desambiguar.

Distinto en la versión 3.8: Use __index__() si está disponible.

Obsoleto desde la versión 3.8: Usar __int__() está deprecado.

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)

Retorna una representación de C long long de obj. Si obj no es una instancia de PyLongObject, primero llama a su método __index__() o __int__() (si está presente) para convertirlo en un PyLongObject.

Si el valor de obj es mayor que PY_LLONG_MAX o menor que PY_LLONG_MIN, establece *overflow en 1 o -1, respectivamente, y retorna -1; de lo contrario, establece *overflow en 0. Si se produce alguna otra excepción, configura *overflow en 0 y retorna -1 como de costumbre.

Retorna -1 en caso de error. Use PyErr_Occurred() para desambiguar.

Nuevo en la versión 3.2.

Distinto en la versión 3.8: Use __index__() si está disponible.

Obsoleto desde la versión 3.8: Usar __int__() está deprecado.

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)

Retorna una representación de C Py_ssize_t de pylong. pylong debe ser una instancia de PyLongObject.

Lanza OverflowError si el valor de pylong está fuera de rango para un Py_ssize_t.

Retorna -1 en caso de error. Use PyErr_Occurred() para desambiguar.

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)

Retorna una representación de C unsigned long de pylong. pylong debe ser una instancia de PyLongObject.

Lanza OverflowError si el valor de pylong está fuera de rango para un unsigned long.

Retorna (unsigned long)-1 en caso de error. Use PyErr_Occurred() para desambiguar.

size_t PyLong_AsSize_t(PyObject *pylong)

Retorna una representación de C size_t de pylong. pylong debe ser una instancia de PyLongObject.

Lanza OverflowError si el valor de pylong está fuera de rango para un size_t.

Retorna (size_t) -1 en caso de error. Use PyErr_Occurred() para desambiguar.

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)

Retorna una representación de C unsigned long long de pylong. pylong debe ser una instancia de PyLongObject.

Lanza OverflowError si el valor de pylong está fuera de rango para un unsigned long long.

Retorna (unsigned long long) -1 en caso de error. Use PyErr_Occurred() para desambiguar.

Distinto en la versión 3.1: Ahora un pylong negativo lanza un OverflowError, no TypeError.

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)

Retorna una representación de C unsigned long de obj. Si obj no es una instancia de PyLongObject, primero llama a su método __index__() o __int__() (si está presente) para convertirlo en un PyLongObject.

Si el valor de obj está fuera del rango para unsigned long, retorna la reducción de ese valor módulo ULONG_MAX + 1.

Retorna (unsigned long)-1 en caso de error. Use PyErr_Occurred() para desambiguar.

Distinto en la versión 3.8: Use __index__() si está disponible.

Obsoleto desde la versión 3.8: Usar __int__() está deprecado.

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)

Retorna una representación de C unsigned long long de obj. Si obj no es una instancia de PyLongObject, primero llama a su método __index__() o __int__() (si está presente) para convertirlo en un PyLongObject.

Si el valor de obj está fuera del rango para unsigned long long, retorna la reducción de ese valor módulo PY_ULLONG_MAX + 1.

Retorna (unsigned long long) -1 por error. Use PyErr_Occurred() para desambiguar.

Distinto en la versión 3.8: Use __index__() si está disponible.

Obsoleto desde la versión 3.8: Usar __int__() está deprecado.

double PyLong_AsDouble(PyObject *pylong)

Retorna una representación de C double de pylong. pylong debe ser una instancia de PyLongObject.

Lanza OverflowError si el valor de pylong está fuera de rango para un double.

Retorna -1.0 en caso de error. Use PyErr_Occurred() para desambiguar.

void* PyLong_AsVoidPtr(PyObject *pylong)

Convierte un entero Python pylong en un puntero C void. Si pylong no se puede convertir, se generará un OverflowError. Esto solo se garantiza para producir un puntero utilizable void para valores creados con PyLong_FromVoidPtr().

Retorna NULL en caso de error. Use PyErr_Occurred() para desambiguar.