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 somint
i Python-lagret.
-
int PyLong_Check(PyObject *p)¶
Returnerar true om dess argument är ett
PyLongObject
eller en subtyp avPyLongObject
. Denna funktion lyckas alltid.
-
int PyLong_CheckExact(PyObject *p)¶
Returnerar true om dess argument är ett
PyLongObject
, men inte en subtyp avPyLongObject
. 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, ellerNULL
om det misslyckas.Den nuvarande implementationen håller en array av heltalsobjekt för alla heltal mellan
-5
och256
. 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, ellerNULL
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 CPy_ssize_t
, ellerNULL
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 Csize_t
, ellerNULL
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, ellerNULL
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, ellerNULL
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, ellerNULL
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, ellerNULL
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, ellerNULL
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, ellerNULL
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 är0
tolkas str med hjälp av Heltalslitteraler-definitionen; i det här fallet ger inledande nollor i ett decimaltal som inte är noll upphov tillValueError
. Om base inte är0
måste det vara mellan2
och36
, 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, kommerValueError
att tas upp.Se även
funktionerna
PyLong_AsNativeBytes()
ochPyLong_FromNativeBytes()
kan användas för att konvertera ettPyLongObject
till/från en array av bytes i basen256
.
-
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 skickaPy_ASNATIVEBYTES_UNSIGNED_BUFFER
kommer att ge samma resultat som att anropaPyLong_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 enPyLongObject
.Utlös
OverflowError
om värdet på obj är utanför intervallet för en long.Returnerar
-1
vid fel. AnvändPyErr_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 medOverflowError
eller något annat undantag.Föråldrad sedan version 3.14: Funktionen är föråldrad.
-
long PyLong_AS_LONG(PyObject *obj)¶
-
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 enPyLongObject
.Om värdet på obj är större än
LONG_MAX
eller mindre änLONG_MIN
, sätt *overflow till1
respektive-1
och returnera-1
; annars sätt *overflow till0
. Om något annat undantag inträffar, sätt *overflow till0
och returnera-1
som vanligt.Returnerar
-1
vid fel. AnvändPyErr_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 enPyLongObject
.Utlös
OverflowError
om värdet på obj är utanför intervallet för ett long long.Returnerar
-1
vid fel. AnvändPyErr_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 enPyLongObject
.Om värdet på obj är större än
LLONG_MAX
eller mindre änLLONG_MIN
, sätt *overflow till1
respektive-1
och returnera-1
; annars sätt *overflow till0
. Om något annat undantag inträffar, sätt *overflow till0
och returnera-1
som vanligt.Returnerar
-1
vid fel. AnvändPyErr_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 avPyLongObject
.Utlös
OverflowError
om värdet på pylong är utanför intervallet för enPy_ssize_t
.Returnerar
-1
vid fel. AnvändPyErr_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ändPyErr_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 avPyLongObject
.Utlös
OverflowError
om värdet på pylong är utanför intervallet för ensize_t
.Returnerar
(size_t)-1
vid fel. AnvändPyErr_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ändPyErr_Occurred()
för att särskilja.Ändrad i version 3.1: En negativ pylong ger nu upphov till
OverflowError
, inteTypeError
.
-
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 enPyLongObject
.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ändPyErr_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 enPyLongObject
.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ändPyErr_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 enPyLongObject
.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ändPyErr_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 medPyLong_FromVoidPtr()
.Returnerar
NULL
vid fel. AnvändPyErr_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 flagganPy_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 skicka2
ä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 omPy_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 tillTypeError
.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åde255
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.
-
Py_ASNATIVEBYTES_DEFAULTS¶
-
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, returnera1
när den är positiv och0
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, returnera1
när den är negativ och0
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, returnera1
när den är noll och0
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 enPyLong_As*
funktion ellerPyLong_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 Pythonint
-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)
-
uint8_t bits_per_digit¶
-
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 omdigits
ärNULL
.
-
Py_ssize_t ndigits¶
Antal siffror i
digits
array. Endast giltigt omdigits
inte ärNULL
.
-
const void *digits¶
Skrivskyddad array av osignerade siffror. Kan vara
NULL
.
-
int64_t value¶
-
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 varaNULL
.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 ärNULL
.
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()
ellerPyLongWriter_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, eller0
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 Pythonint
. Layouten för digits beskrivs avPyLong_GetNativeLayout()
.Siffrorna måste ligga i intervallet [
0
;(1 << bits_per_digit) - 1
] (därbits_per_digit
är antalet bitar per siffra). Alla oanvända mest signifikanta siffror måste sättas till0
.Alternativt kan du anropa
PyLongWriter_Discard()
för att förstöra skrivarinstansen utan att skapa ettint
-objekt.
-
PyObject *PyLongWriter_Finish(PyLongWriter *writer)¶
- Returnera värde: Ny referens.
Avsluta en
PyLongWriter
som skapats avPyLongWriter_Create()
.Vid framgång returneras ett Python
int
-objekt. Vid fel, sätt ett undantag och returneraNULL
.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 avPyLongWriter_Create()
.Om writer är
NULL
utförs ingen åtgärd.Writer-instansen och digits-arrayen är ogiltiga efter anropet.