Heltalsobjekt

Alla heltal är implementerade som ”långa” heltalsobjekt av godtycklig storlek.

Vid fel returnerar de flesta PyLong_As* API:er (return type)-1 som inte kan särskiljas från ett tal. Använd PyErr_Occurred() för att särskilja.

type PyLongObject
En del av Begränsat API (som en ogenomskinlig struktur).

Denna subtyp av PyObject representerar ett Python-objekt med heltal.

PyTypeObject PyLong_Type
En del av Stabil ABI.

Denna instans av PyTypeObject representerar Pythons heltalstyp. Detta är samma objekt som int i Python-lagret.

int PyLong_Check(PyObject *p)

Returnerar true om dess argument är ett PyLongObject eller en subtyp av PyLongObject. Denna funktion lyckas alltid.

int PyLong_CheckExact(PyObject *p)

Returnerar true om dess argument är ett PyLongObject, men inte en subtyp av PyLongObject. Denna funktion lyckas alltid.

PyObject *PyLong_FromLong(long v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från v, eller NULL om det misslyckas.

Den nuvarande implementationen håller en array av heltalsobjekt för alla heltal mellan -5 och 256. När du skapar ett int i det intervallet får du faktiskt bara tillbaka en referens till det befintliga objektet.

PyObject *PyLong_FromUnsignedLong(unsigned long v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från ett C unsigned long, eller NULL om det misslyckas.

PyObject *PyLong_FromSsize_t(Py_ssize_t v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från en C Py_ssize_t, eller NULL vid fel.

PyObject *PyLong_FromSize_t(size_t v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från en C size_t, eller NULL om det misslyckas.

PyObject *PyLong_FromLongLong(long long v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från ett C long long, eller NULL om det misslyckas.

PyObject *PyLong_FromInt32(int32_t value)
PyObject *PyLong_FromInt64(int64_t value)
En del av Stabil ABI sedan version 3.14.

Returnerar ett nytt PyLongObject-objekt från en signerad C int32_t eller int64_t, eller NULL med ett undantag om det misslyckas.

Tillagd i version 3.14.

PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från ett C unsigned long long, eller NULL om det misslyckas.

PyObject *PyLong_FromUInt32(uint32_t value)
PyObject *PyLong_FromUInt64(uint64_t value)
En del av Stabil ABI sedan version 3.14.

Returnerar ett nytt PyLongObject-objekt från en osignerad C uint32_t eller uint64_t, eller NULL med ett undantag om det misslyckas.

Tillagd i version 3.14.

PyObject *PyLong_FromDouble(double v)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject-objekt från heltalsdelen av v, eller NULL om det misslyckas.

PyObject *PyLong_FromString(const char *str, char **pend, int base)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett nytt PyLongObject baserat på strängvärdet i str, som tolkas enligt radix i base, eller NULL om det misslyckas. Om pend är icke-NULL kommer *pend att peka på slutet av str vid framgång eller på det första tecknet som inte kunde bearbetas vid fel. Om base är 0 tolkas str med hjälp av Heltalslitteraler-definitionen; i det här fallet ger inledande nollor i ett decimaltal som inte är noll upphov till ValueError. Om base inte är 0 måste det vara mellan 2 och 36, inklusive. Ledande och efterföljande blanksteg och enkla understrykningstecken efter en basspecifikation och mellan siffror ignoreras. Om det inte finns några siffror eller om str inte är NULL-terminerad efter siffrorna och efterföljande blanksteg, kommer ValueError att tas upp.

Se även

funktionerna PyLong_AsNativeBytes() och PyLong_FromNativeBytes() kan användas för att konvertera ett PyLongObject till/från en array av bytes i basen 256.

PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)
Returnera värde: Ny referens.

Konverterar en sekvens av Unicode-siffror i strängen u till ett heltalsvärde i Python.

Tillagd i version 3.3.

PyObject *PyLong_FromVoidPtr(void *p)
Returnera värde: Ny referens. En del av Stabil ABI.

Skapar ett Python heltal från pekaren p. Pekarens värde kan hämtas från det resulterande värdet med hjälp av PyLong_AsVoidPtr().

PyObject *PyLong_FromNativeBytes(const void *buffer, size_t n_bytes, int flags)
En del av Stabil ABI sedan version 3.14.

Skapa ett Python-integral från det värde som finns i de första n_bytes i buffer, tolkat som ett tvåkompletterat signerat tal.

flags är som för PyLong_AsNativeBytes(). Om du anger -1 kommer du att välja den inbyggda endian som CPython kompilerades med och anta att den mest signifikanta biten är en teckenbit. Att skicka Py_ASNATIVEBYTES_UNSIGNED_BUFFER kommer att ge samma resultat som att anropa PyLong_FromUnsignedNativeBytes(). Andra flaggor ignoreras.

Tillagd i version 3.13.

PyObject *PyLong_FromUnsignedNativeBytes(const void *buffer, size_t n_bytes, int flags)
En del av Stabil ABI sedan version 3.14.

Skapa ett Python-integral från det värde som finns i de första n_bytes i buffer, tolkat som ett osignerat tal.

flags är som för PyLong_AsNativeBytes(). Om du skickar -1 kommer du att välja den inbyggda endian som CPython kompilerades med och anta att den mest signifikanta biten inte är en teckenbit. Andra flaggor än endian ignoreras.

Tillagd i version 3.13.

long PyLong_AsLong(PyObject *obj)
En del av Stabil ABI.

Returnerar en C long-representation av obj. Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

Utlös OverflowError om värdet på obj är utanför intervallet för en long.

Returnerar -1 vid fel. Använd PyErr_Occurred() för att särskilja.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

Ändrad i version 3.10: Denna funktion kommer inte längre att använda __int__().

long PyLong_AS_LONG(PyObject *obj)

Ett soft deprecated alias. Exakt likvärdigt med det föredragna PyLong_AsLong. I synnerhet kan det misslyckas med OverflowError eller något annat undantag.

Föråldrad sedan version 3.14: Funktionen är föråldrad.

int PyLong_AsInt(PyObject *obj)
En del av Stabil ABI sedan version 3.13.

Liknar PyLong_AsLong(), men lagrar resultatet i en C int istället för en C long.

Tillagd i version 3.13.

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)
En del av Stabil ABI.

Returnerar en C long-representation av obj. Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

Om värdet på obj är större än LONG_MAX eller mindre än LONG_MIN, sätt *overflow till 1 respektive -1 och returnera -1; annars sätt *overflow till 0. Om något annat undantag inträffar, sätt *overflow till 0 och returnera -1 som vanligt.

Returnerar -1 vid fel. Använd PyErr_Occurred() för att särskilja.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

Ändrad i version 3.10: Denna funktion kommer inte längre att använda __int__().

long long PyLong_AsLongLong(PyObject *obj)
En del av Stabil ABI.

Returnerar en C long long-representation av obj. Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

Utlös OverflowError om värdet på obj är utanför intervallet för ett long long.

Returnerar -1 vid fel. Använd PyErr_Occurred() för att särskilja.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

Ändrad i version 3.10: Denna funktion kommer inte längre att använda __int__().

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)
En del av Stabil ABI.

Returnerar en C long long-representation av obj. Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

Om värdet på obj är större än LLONG_MAX eller mindre än LLONG_MIN, sätt *overflow till 1 respektive -1 och returnera -1; annars sätt *overflow till 0. Om något annat undantag inträffar, sätt *overflow till 0 och returnera -1 som vanligt.

Returnerar -1 vid fel. Använd PyErr_Occurred() för att särskilja.

Tillagd i version 3.2.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

Ändrad i version 3.10: Denna funktion kommer inte längre att använda __int__().

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
En del av Stabil ABI.

Returnerar en C Py_ssize_t-representation av pylong. pylong måste vara en instans av PyLongObject.

Utlös OverflowError om värdet på pylong är utanför intervallet för en Py_ssize_t.

Returnerar -1 vid fel. Använd PyErr_Occurred() för att särskilja.

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
En del av Stabil ABI.

Returnerar en C unsigned long-representation av pylong. pylong måste vara en instans av PyLongObject.

Utlös OverflowError om värdet på pylong är utanför intervallet för en unsigned long.

Returnerar (unsigned long)-1 vid fel. Använd PyErr_Occurred() för att särskilja.

size_t PyLong_AsSize_t(PyObject *pylong)
En del av Stabil ABI.

Returnerar en C size_t-representation av pylong. pylong måste vara en instans av PyLongObject.

Utlös OverflowError om värdet på pylong är utanför intervallet för en size_t.

Returnerar (size_t)-1 vid fel. Använd PyErr_Occurred() för att särskilja.

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)
En del av Stabil ABI.

Returnerar en C unsigned long long-representation av pylong. pylong måste vara en instans av PyLongObject.

Utlös OverflowError om värdet på pylong är utanför intervallet för en unsigned long long.

Returnerar (unsigned long long)-1 vid fel. Använd PyErr_Occurred() för att särskilja.

Ändrad i version 3.1: En negativ pylong ger nu upphov till OverflowError, inte TypeError.

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)
En del av Stabil ABI.

Returnerar en C unsigned long-representation av obj. Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

Om värdet på obj är utanför intervallet för en unsigned long, returneras minskningen av värdet modulo ULONG_MAX + 1.

Returnerar (unsigned long)-1 vid fel. Använd PyErr_Occurred() för att särskilja.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

Ändrad i version 3.10: Denna funktion kommer inte längre att använda __int__().

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
En del av Stabil ABI.

Returnerar en C unsigned long long-representation av obj. Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

Om värdet på obj är utanför intervallet för en unsigned long long, returneras reduktionen av värdet modulo ULLONG_MAX + 1.

Returnerar (unsigned long long)-1 vid fel. Använd PyErr_Occurred() för att särskilja.

Ändrad i version 3.8: Använd __index__() om det finns tillgängligt.

Ändrad i version 3.10: Denna funktion kommer inte längre att använda __int__().

int PyLong_AsInt32(PyObject *obj, int32_t *value)
int PyLong_AsInt64(PyObject *obj, int64_t *value)
En del av Stabil ABI sedan version 3.14.

Sätt *värde till en signerad C int32_t eller int64_t representation av obj.

Om obj-värdet ligger utanför intervallet genereras ett OverflowError.

Ställ in *value och returnera 0 vid framgång. Ställ in ett undantag och returnera -1 vid fel.

value får inte vara NULL.

Tillagd i version 3.14.

int PyLong_AsUInt32(PyObject *obj, uint32_t *value)
int PyLong_AsUInt64(PyObject *obj, uint64_t *value)
En del av Stabil ABI sedan version 3.14.

Sätt *värde till en osignerad C uint32_t eller uint64_t representation av obj.

Om obj inte är en instans av PyLongObject, anropa först dess __index__()-metod (om sådan finns) för att konvertera den till en PyLongObject.

  • Om obj är negativ, skapa ett ValueError.

  • Om obj-värdet ligger utanför intervallet genereras ett OverflowError.

Ställ in *value och returnera 0 vid framgång. Ställ in ett undantag och returnera -1 vid fel.

value får inte vara NULL.

Tillagd i version 3.14.

double PyLong_AsDouble(PyObject *pylong)
En del av Stabil ABI.

Returnerar en C double-representation av pylong. pylong måste vara en instans av PyLongObject.

Utlös OverflowError om värdet på pylong är utanför intervallet för en double.

Returnerar -1.0 vid fel. Använd PyErr_Occurred() för att undvika tvetydighet.

void *PyLong_AsVoidPtr(PyObject *pylong)
En del av Stabil ABI.

Konverterar ett Python-heltal pylong till en C void-pekare. Om pylong inte kan konverteras, kommer ett OverflowError att uppstå. Detta är endast säkerställt för att producera en användbar void-pekare för värden som skapats med PyLong_FromVoidPtr().

Returnerar NULL vid fel. Använd PyErr_Occurred() för att särskilja.

Py_ssize_t PyLong_AsNativeBytes(PyObject *pylong, void *buffer, Py_ssize_t n_bytes, int flags)
En del av Stabil ABI sedan version 3.14.

Kopierar Python-heltalvärdet pylong till en inbyggd buffer med storleken n_bytes. flags kan sättas till -1 för att bete sig på liknande sätt som en C-cast, eller till värden som dokumenteras nedan för att styra beteendet.

Returnerar -1 med ett undantag vid fel. Detta kan hända om pylong inte kan tolkas som ett heltal, eller om pylong var negativt och flaggan Py_ASNATIVEBYTES_REJECT_NEGATIVE var inställd.

I annat fall returneras det antal byte som krävs för att lagra värdet. Om detta är lika med eller mindre än n_bytes har hela värdet kopierats. Alla n_bytes i bufferten skrivs: stora buffertar fylls på med nollor.

Om det returnerade värdet är större än n_bytes har värdet trunkerats: så många av de lägsta bitarna av värdet som ryms skrivs in och de högre bitarna ignoreras. Detta motsvarar det typiska beteendet hos en C-stil downcast.

Anteckning

Överflöde betraktas inte som ett fel. Om det returnerade värdet är större än n_bytes, har de mest signifikanta bitarna tagits bort.

0 kommer aldrig att returneras.

Värdena kopieras alltid som tvåkomplement.

Exempel på användning:

int32_t värde;
Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, &värde, sizeof(värde), -1);
if (bytes < 0) {
    // Misslyckades. Ett Python-undantag skapades med orsaken.
    returnera NULL;
}
else if (bytes <= (Py_ssize_t)sizeof(värde)) {
    // Framgång!
}
else {
    // Överflöde inträffade, men 'värde' innehåller de trunkerade
    // lägsta bitarna av pylong.
}

Om du anger noll till n_bytes returneras storleken på en buffert som skulle vara tillräckligt stor för att rymma värdet. Denna kan vara större än vad som är tekniskt nödvändigt, men inte orimligt. Om n_bytes=0 kan buffer vara NULL.

Anteckning

Att skicka n_bytes=0 till den här funktionen är inte ett korrekt sätt att bestämma bitlängden för värdet.

För att komma åt hela Python-värdet av en okänd storlek kan funktionen anropas två gånger: först för att bestämma buffertstorleken, sedan för att fylla den:

// Ask how much space we need.
Py_ssize_t expected = PyLong_AsNativeBytes(pylong, NULL, 0, -1);
if (expected < 0) {
    // Failed. A Python exception was set with the reason.
    return NULL;
}
assert(expected != 0);  // Impossible per the API definition.
uint8_t *bignum = malloc(expected);
if (!bignum) {
    PyErr_SetString(PyExc_MemoryError, "bignum malloc failed.");
    return NULL;
}
// Safely get the entire value.
Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, bignum, expected, -1);
if (bytes < 0) {  // Exception has been set.
    free(bignum);
    return NULL;
}
else if (bytes > expected) {  // This should not be possible.
    PyErr_SetString(PyExc_RuntimeError,
        "Unexpected bignum truncation after a size check.");
    free(bignum);
    return NULL;
}
// The expected success given the above pre-check.
// ... use bignum ...
free(bignum);

flags är antingen -1 (Py_ASNATIVEBYTES_DEFAULTS) för att välja standardvärden som beter sig mest som en C-cast, eller en kombination av de andra flaggorna i tabellen nedan. Observera att -1 inte kan kombineras med andra flaggor.

För närvarande motsvarar -1 Py_ASNATIVEBYTES_NATIVE_ENDIAN | Py_ASNATIVEBYTES_UNSIGNED_BUFFER.

Flagga

Värde

Py_ASNATIVEBYTES_DEFAULTS

-1

Py_ASNATIVEBYTES_BIG_ENDIAN

0

Py_ASNATIVEBYTES_LITTLE_ENDIAN

1

Py_ASNATIVEBYTES_NATIVE_ENDIAN

3

Py_ASNATIVEBYTES_UNSIGNED_BUFFER

4

Py_ASNATIVEBYTES_REJECT_NEGATIVE

8

Py_ASNATIVEBYTES_ALLOW_INDEX

16

Om du anger Py_ASNATIVEBYTES_NATIVE_ENDIAN åsidosätts alla andra endian-flaggor. Att skicka 2 är reserverat.

Som standard kommer tillräcklig buffert att begäras för att inkludera en teckenbit. Till exempel, vid konvertering av 128 med n_bytes=1, kommer funktionen att returnera 2 (eller mer) för att lagra en nollteckenbit.

Om Py_ASNATIVEBYTES_UNSIGNED_BUFFER anges kommer en bit med nolltecken att utelämnas vid storleksberäkningar. Detta gör att t.ex. 128 kan rymmas i en buffert på en byte. Om målbufferten senare behandlas som signerad kan ett positivt ingångsvärde bli negativt. Observera att flaggan inte påverkar hanteringen av negativa värden: för dessa begärs alltid utrymme för en teckenbit.

Om du anger Py_ASNATIVEBYTES_REJECT_NEGATIVE kommer ett undantag att ställas in om pylong är negativt. Utan denna flagga kommer negativa värden att kopieras förutsatt att det finns tillräckligt med utrymme för minst en teckenbit, oavsett om Py_ASNATIVEBYTES_UNSIGNED_BUFFER har angetts.

Om Py_ASNATIVEBYTES_ALLOW_INDEX specificeras och ett icke-integer värde skickas, kommer dess __index__() metod att anropas först. Detta kan resultera i att Python-kod exekveras och att andra trådar tillåts köras, vilket kan orsaka ändringar i andra objekt eller värden som används. När flags är -1 anges inte detta alternativ, och värden som inte är heltal kommer att ge upphov till TypeError.

Anteckning

Med standard flags (-1, eller UNSIGNED_BUFFER utan REJECT_NEGATIVE), kan flera Python heltal mappas till ett enda värde utan överflöd. Till exempel, både 255 och -1 passar en buffert på en byte och ställer in alla dess bitar. Detta matchar typiskt C cast-beteende.

Tillagd i version 3.13.

int PyLong_GetSign(PyObject *obj, int *sign)

Hämta tecknet för heltalsobjektet obj.

Vid framgång, sätt *sign till heltalstecknet (0, -1 eller +1 för noll, negativt respektive positivt heltal) och returnera 0.

Om funktionen misslyckas returneras -1 med en undantagsuppsättning. Denna funktion lyckas alltid om obj är en PyLongObject eller dess subtyp.

Tillagd i version 3.14.

int PyLong_IsPositive(PyObject *obj)

Kontrollera om heltalsobjektet obj är positivt (obj > 0).

Om obj är en instans av PyLongObject eller dess subtyp, returnera 1 när den är positiv och 0 annars. Annars anges ett undantag och -1 returneras.

Tillagd i version 3.14.

int PyLong_IsNegative(PyObject *obj)

Kontrollera om heltalsobjektet obj är negativt (obj < 0).

Om obj är en instans av PyLongObject eller dess subtyp, returnera 1 när den är negativ och 0 annars. Annars anges ett undantag och -1 returneras.

Tillagd i version 3.14.

int PyLong_IsZero(PyObject *obj)

Kontrollera om heltalsobjektet obj är noll.

Om obj är en instans av PyLongObject eller dess subtyp, returnera 1 när den är noll och 0 annars. Annars anges ett undantag och -1 returneras.

Tillagd i version 3.14.

PyObject *PyLong_GetInfo(void)
En del av Stabil ABI.

Vid framgång returneras en skrivskyddad named tuple, som innehåller information om Pythons interna representation av heltal. Se sys.int_info för beskrivning av enskilda fält.

Vid misslyckande returneras NULL med en undantagsuppsättning.

Tillagd i version 3.1.

int PyUnstable_Long_IsCompact(const PyLongObject *op)
Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.

Returnerar 1 om op är kompakt, 0 annars.

Denna funktion gör det möjligt för prestandakritisk kod att implementera en ”snabb väg” för små heltal. För kompakta värden använd PyUnstable_Long_CompactValue(); för andra använd en PyLong_As* funktion eller PyLong_AsNativeBytes().

Hastighetsökningen förväntas vara försumbar för de flesta användare.

Exakt vilka värden som anses vara kompakta är en implementeringsdetalj och kan komma att ändras.

Tillagd i version 3.12.

Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)
Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.

Om op är kompakt, vilket bestäms av PyUnstable_Long_IsCompact(), returneras dess värde.

I annat fall är returvärdet odefinierat.

Tillagd i version 3.12.

Exportera API

Tillagd i version 3.14.

struct PyLongLayout

Layout av en matris med ”siffror” (”lemmar” i GMP-terminologin), som används för att representera absolut värde för heltal med godtycklig precision.

Använd PyLong_GetNativeLayout() för att få den ursprungliga layouten för Python int-objekt, som används internt för heltal med ”tillräckligt stort” absolut värde.

Se även sys.int_info som visar liknande information i Python.

uint8_t bits_per_digit

Bitar per siffra. En 15-bitarssiffra innebär t.ex. att bitarna 0-14 innehåller meningsfull information.

uint8_t digit_size

Sifferstorlek i byte. En 15-bitarssiffra kräver t.ex. minst 2 byte.

int8_t digits_order

Sifferordning:

  • 1 för den mest signifikanta siffran först

  • -1 för den minst signifikanta siffran först

int8_t digit_endianness

Siffra endianness:

  • 1 för den mest signifikanta byten först (big endian)

  • -1 för minst signifikanta byte först (little endian)

const PyLongLayout *PyLong_GetNativeLayout(void)

Hämta den ursprungliga layouten för Python int-objekt.

Se strukturen PyLongLayout.

Funktionen får inte anropas före initialisering av Python och inte heller efter slutförande av Python. Den returnerade layouten är giltig tills Python är slutfört. Layouten är densamma för alla Python-undertolkare i en process och kan därför cachelagras.

struct PyLongExport

Export av ett Python int-objekt.

Det finns två fall:

int64_t value

Det ursprungliga heltalsvärdet för det exporterade int-objektet. Endast giltigt om digits är NULL.

uint8_t negative

1 om talet är negativt, 0 annars. Gäller endast om digits inte är NULL.

Py_ssize_t ndigits

Antal siffror i digits array. Endast giltigt om digits inte är NULL.

const void *digits

Skrivskyddad array av osignerade siffror. Kan vara NULL.

int PyLong_Export(PyObject *obj, PyLongExport *export_long)

Exportera ett Python int-objekt.

export_long måste peka på en PyLongExport-struktur som allokerats av anroparen. Den får inte vara NULL.

Vid framgång, fyll i *export_long och returnera 0. Vid fel, ange ett undantag och returnera -1.

PyLong_FreeExport() måste anropas när exporten inte längre behövs.

Denna funktion lyckas alltid om obj är ett Python int-objekt eller en underklass.

void PyLong_FreeExport(PyLongExport *export_long)

Frigör exporten export_long som skapats av PyLong_Export().

Anrop av PyLong_FreeExport() är valfritt om export_long->digits är NULL.

PyLongWriter API

API:et PyLongWriter kan användas för att importera ett heltal.

Tillagd i version 3.14.

struct PyLongWriter

En Python int skrivarinstans.

Instansen måste förstöras av PyLongWriter_Finish() eller PyLongWriter_Discard().

PyLongWriter *PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)

Skapa en PyLongWriter.

Vid framgång, allokera *digits och returnera en skrivare. Vid fel, sätt ett undantag och returnera NULL.

negative är 1 om talet är negativt, eller 0 annars.

ndigits är antalet siffror i digits-arrayen. Det måste vara större än 0.

digits får inte vara NULL.

Efter ett lyckat anrop till denna funktion bör anroparen fylla i matrisen med siffror digits och sedan anropa PyLongWriter_Finish() för att få en Python int. Layouten för digits beskrivs av PyLong_GetNativeLayout().

Siffrorna måste ligga i intervallet [0; (1 << bits_per_digit) - 1] (där bits_per_digit är antalet bitar per siffra). Alla oanvända mest signifikanta siffror måste sättas till 0.

Alternativt kan du anropa PyLongWriter_Discard() för att förstöra skrivarinstansen utan att skapa ett int-objekt.

PyObject *PyLongWriter_Finish(PyLongWriter *writer)
Returnera värde: Ny referens.

Avsluta en PyLongWriter som skapats av PyLongWriter_Create().

Vid framgång returneras ett Python int-objekt. Vid fel, sätt ett undantag och returnera NULL.

Funktionen tar hand om normaliseringen av siffrorna och konverterar objektet till ett kompakt heltal om det behövs.

Writer-instansen och digits-arrayen är ogiltiga efter anropet.

void PyLongWriter_Discard(PyLongWriter *writer)

Kassera en PyLongWriter som skapats av PyLongWriter_Create().

Om writer är NULL utförs ingen åtgärd.

Writer-instansen och digits-arrayen är ogiltiga efter anropet.