Integer-Objekte¶
Alle ganzen Zahlen werden als „long“ Integer-Objekte beliebiger Größe implementiert.
Bei einem Fehler geben die meisten PyLong_As* APIs (return type)-1 zurück, was nicht von einer Zahl zu unterscheiden ist. Verwenden Sie PyErr_Occurred(), um dies zu disambiguieren.
-
type PyLongObject¶
- Teil der Limited API (als opaker Struct).
Dieser Untertyp von
PyObjectrepräsentiert ein Python-Integer-Objekt.
-
PyTypeObject PyLong_Type¶
- Teil der Stable ABI.
Diese Instanz von
PyTypeObjectrepräsentiert den Python-Integer-Typ. Dies ist dasselbe Objekt wieintauf der Python-Ebene.
-
int PyLong_Check(PyObject *p)¶
Gibt wahr zurück, wenn das Argument ein
PyLongObjectoder ein Untertyp vonPyLongObjectist. Diese Funktion ist immer erfolgreich.
-
int PyLong_CheckExact(PyObject *p)¶
Gibt wahr zurück, wenn das Argument ein
PyLongObject, aber kein Untertyp vonPyLongObjectist. Diese Funktion ist immer erfolgreich.
-
PyObject *PyLong_FromLong(long v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus v zurück oderNULLbei einem Fehler.CPython Implementierungsdetail: CPython unterhält ein Array von Integer-Objekten für alle ganzen Zahlen zwischen
-5und256. Wenn Sie eine Ganzzahl in diesem Bereich erstellen, erhalten Sie tatsächlich nur eine Referenz auf das vorhandene Objekt.
-
PyObject *PyLong_FromUnsignedLong(unsigned long v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus einem C unsigned long zurück oderNULLbei einem Fehler.
-
PyObject *PyLong_FromSsize_t(Py_ssize_t v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus einem CPy_ssize_tzurück oderNULLbei einem Fehler.
-
PyObject *PyLong_FromSize_t(size_t v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus einem Csize_tzurück oderNULLbei einem Fehler.
-
PyObject *PyLong_FromLongLong(long long v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus einem C long long zurück oderNULLbei einem Fehler.
-
PyObject *PyLong_FromInt32(int32_t value)¶
-
PyObject *PyLong_FromInt64(int64_t value)¶
- Teil des Stable ABI seit Version 3.14.
Gibt ein neues
PyLongObject-Objekt aus einem vorzeichenbehafteten C int32_t oder int64_t zurück oderNULLmit gesetzter Ausnahme bei einem Fehler.Hinzugefügt in Version 3.14.
-
PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus einem C unsigned long long zurück oderNULLbei einem Fehler.
-
PyObject *PyLong_FromUInt32(uint32_t value)¶
-
PyObject *PyLong_FromUInt64(uint64_t value)¶
- Teil des Stable ABI seit Version 3.14.
Gibt ein neues
PyLongObject-Objekt aus einem vorzeichenlosen C uint32_t oder uint64_t zurück oderNULLmit gesetzter Ausnahme bei einem Fehler.Hinzugefügt in Version 3.14.
-
PyObject *PyLong_FromDouble(double v)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObject-Objekt aus dem ganzzahligen Teil von v zurück oderNULLbei einem Fehler.
-
PyObject *PyLong_FromString(const char *str, char **pend, int base)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Gibt ein neues
PyLongObjectbasierend auf dem Zeichenkettenwert in str zurück, der gemäß der Radix in base interpretiert wird, oderNULLbei einem Fehler. Wenn pend nichtNULList, wird *pend bei Erfolg auf das Ende von str oder bei einem Fehler auf das erste nicht verarbeitbare Zeichen zeigen. Wenn base0ist, wird str gemäß der Definition der Integer-Literale interpretiert; in diesem Fall löst eine führende Null in einer nicht-null Dezimalzahl einenValueErroraus. Wenn base nicht0ist, muss es zwischen2und36(einschließlich) liegen. Führende und nachfolgende Leerzeichen sowie einzelne Unterstriche nach einer Basisangabe und zwischen Ziffern werden ignoriert. Wenn keine Ziffern vorhanden sind oder str nach den Ziffern und nachfolgenden Leerzeichen nicht NULL-terminiert ist, wird einValueErrorausgelöst.Siehe auch
Die Funktionen
PyLong_AsNativeBytes()undPyLong_FromNativeBytes()können verwendet werden, um einPyLongObjectin/aus einem Byte-Array in Basis256zu konvertieren.
-
PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)¶
- Rückgabewert: Neue Referenz.
Konvertiert eine Sequenz von Unicode-Ziffern in der Zeichenkette u in einen Python-Ganzzahlwert.
Hinzugefügt in Version 3.3.
-
PyObject *PyLong_FromVoidPtr(void *p)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt eine Python-Ganzzahl aus dem Zeiger p. Der Zeigerwert kann mit
PyLong_AsVoidPtr()aus dem resultierenden Wert abgerufen werden.
-
PyObject *PyLong_FromNativeBytes(const void *buffer, size_t n_bytes, int flags)¶
- Teil des Stable ABI seit Version 3.14.
Erstellt eine Python-Ganzzahl aus dem Wert, der in den ersten n_bytes des buffer enthalten ist, interpretiert als zweierkomplementierte vorzeichenbehaftete Zahl.
flags sind wie für
PyLong_AsNativeBytes(). Die Übergabe von-1wählt die native Endianness aus, mit der CPython kompiliert wurde, und geht davon aus, dass das höchstwertige Bit ein Vorzeichenbit ist. Die Übergabe vonPy_ASNATIVEBYTES_UNSIGNED_BUFFERergibt dasselbe Ergebnis wie der Aufruf vonPyLong_FromUnsignedNativeBytes(). Andere Flags werden ignoriert.Hinzugefügt in Version 3.13.
-
PyObject *PyLong_FromUnsignedNativeBytes(const void *buffer, size_t n_bytes, int flags)¶
- Teil des Stable ABI seit Version 3.14.
Erstellt eine Python-Ganzzahl aus dem Wert, der in den ersten n_bytes des buffer enthalten ist, interpretiert als vorzeichenlose Zahl.
flags sind wie für
PyLong_AsNativeBytes(). Die Übergabe von-1wählt die native Endianness aus, mit der CPython kompiliert wurde, und geht davon aus, dass das höchstwertige Bit kein Vorzeichenbit ist. Andere Flags als die Endianness werden ignoriert.Hinzugefügt in Version 3.13.
-
long PyLong_AsLong(PyObject *obj)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung long von obj zurück. Wenn obj keine Instanz von
PyLongObjectist, wird zuerst seine__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Löst einen
OverflowErroraus, wenn der Wert von obj außerhalb des Bereichs für ein long liegt.Gibt
-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.Geändert in Version 3.10: Diese Funktion verwendet nicht mehr
__int__().-
long PyLong_AS_LONG(PyObject *obj)¶
Ein soft deprecated Alias. Exakt äquivalent zu der bevorzugten Funktion
PyLong_AsLong. Insbesondere kann sie mitOverflowErroroder einer anderen Ausnahme fehlschlagen.Veraltet seit Version 3.14: Die Funktion ist soft deprecated.
-
long PyLong_AS_LONG(PyObject *obj)¶
-
int PyLong_AsInt(PyObject *obj)¶
- Teil des Stable ABI seit Version 3.13.
Ähnlich wie
PyLong_AsLong(), speichert das Ergebnis jedoch in einem C int anstelle eines C long.Hinzugefügt in Version 3.13.
-
long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung long von obj zurück. Wenn obj keine Instanz von
PyLongObjectist, wird zuerst seine__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Wenn der Wert von obj größer als
LONG_MAXoder kleiner alsLONG_MINist, wird *overflow auf1bzw.-1gesetzt und-1zurückgegeben; andernfalls wird *overflow auf0gesetzt. Wenn eine andere Ausnahme auftritt, wird *overflow auf0gesetzt und wie üblich-1zurückgegeben.Gibt
-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.Geändert in Version 3.10: Diese Funktion verwendet nicht mehr
__int__().
-
long long PyLong_AsLongLong(PyObject *obj)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung long long von obj zurück. Wenn obj keine Instanz von
PyLongObjectist, wird zuerst seine__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Löst einen
OverflowErroraus, wenn der Wert von obj außerhalb des Bereichs für ein long long liegt.Gibt
-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.Geändert in Version 3.10: Diese Funktion verwendet nicht mehr
__int__().
-
long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung long long von obj zurück. Wenn obj keine Instanz von
PyLongObjectist, wird zuerst seine__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Wenn der Wert von obj größer als
LLONG_MAXoder kleiner alsLLONG_MINist, wird *overflow auf1bzw.-1gesetzt und-1zurückgegeben; andernfalls wird *overflow auf0gesetzt. Wenn eine andere Ausnahme auftritt, wird *overflow auf0gesetzt und wie üblich-1zurückgegeben.Gibt
-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.Hinzugefügt in Version 3.2.
Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.Geändert in Version 3.10: Diese Funktion verwendet nicht mehr
__int__().
-
Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung
Py_ssize_tvon pylong zurück. pylong muss eine Instanz vonPyLongObjectsein.Löst einen
OverflowErroraus, wenn der Wert von pylong außerhalb des Bereichs für einPy_ssize_tliegt.Gibt
-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.
-
unsigned long PyLong_AsUnsignedLong(PyObject *pylong)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung unsigned long von pylong zurück. pylong muss eine Instanz von
PyLongObjectsein.Löst einen
OverflowErroraus, wenn der Wert von pylong außerhalb des Bereichs für ein unsigned long liegt.Gibt
(unsigned long)-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.
-
size_t PyLong_AsSize_t(PyObject *pylong)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung
size_tvon pylong zurück. pylong muss eine Instanz vonPyLongObjectsein.Löst einen
OverflowErroraus, wenn der Wert von pylong außerhalb des Bereichs für einsize_tliegt.Gibt
(size_t)-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.
-
unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)¶
- Teil der Stable ABI.
Gibt eine C-Darstellung unsigned long long von pylong zurück. pylong muss eine Instanz von
PyLongObjectsein.Löst
OverflowErroraus, wenn der Wert von pylong außerhalb des gültigen Bereichs für einen unsigned long long liegt.Gibt bei einem Fehler
(unsigned long long)-1zurück. Verwenden SiePyErr_Occurred(), um dies zu unterscheiden.Geändert in Version 3.1: Ein negativer pylong löst nun
OverflowErroraus, nichtTypeError.
-
unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)¶
- Teil der Stable ABI.
Gibt eine C unsigned long-Repräsentation von obj zurück. Wenn obj keine Instanz von
PyLongObjectist, wird zuerst deren__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Wenn der Wert von obj außerhalb des gültigen Bereichs für einen unsigned long liegt, wird die Reduktion dieses Werts modulo
ULONG_MAX + 1zurückgegeben.Gibt
(unsigned long)-1bei einem Fehler zurück. Verwenden SiePyErr_Occurred(), um dies zu disambiguieren.Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.Geändert in Version 3.10: Diese Funktion verwendet nicht mehr
__int__().
-
unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)¶
- Teil der Stable ABI.
Gibt eine C unsigned long long-Repräsentation von obj zurück. Wenn obj keine Instanz von
PyLongObjectist, wird zuerst deren__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Wenn der Wert von obj außerhalb des gültigen Bereichs für einen unsigned long long liegt, wird die Reduktion dieses Werts modulo
ULLONG_MAX + 1zurückgegeben.Gibt bei einem Fehler
(unsigned long long)-1zurück. Verwenden SiePyErr_Occurred(), um dies zu unterscheiden.Geändert in Version 3.8: Verwendet
__index__(), falls verfügbar.Geändert in Version 3.10: Diese Funktion verwendet nicht mehr
__int__().
-
int PyLong_AsInt32(PyObject *obj, int32_t *value)¶
-
int PyLong_AsInt64(PyObject *obj, int64_t *value)¶
- Teil des Stable ABI seit Version 3.14.
Setzt *value auf eine vorzeichenbehaftete C int32_t- oder int64_t-Repräsentation von obj.
Wenn obj keine Instanz von
PyLongObjectist, wird zuerst deren__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Wenn der Wert von obj außerhalb des gültigen Bereichs liegt, wird ein
OverflowErrorausgelöst.Setzt *value und gibt bei Erfolg
0zurück. Setzt eine Ausnahme und gibt bei einem Fehler-1zurück.value darf nicht
NULLsein.Hinzugefügt in Version 3.14.
-
int PyLong_AsUInt32(PyObject *obj, uint32_t *value)¶
-
int PyLong_AsUInt64(PyObject *obj, uint64_t *value)¶
- Teil des Stable ABI seit Version 3.14.
Setzt *value auf eine vorzeichenlose C uint32_t- oder uint64_t-Repräsentation von obj.
Wenn obj keine Instanz von
PyLongObjectist, wird zuerst deren__index__()-Methode (falls vorhanden) aufgerufen, um sie in einPyLongObjectzu konvertieren.Wenn obj negativ ist, wird ein
ValueErrorausgelöst.Wenn der Wert von obj außerhalb des gültigen Bereichs liegt, wird ein
OverflowErrorausgelöst.
Setzt *value und gibt bei Erfolg
0zurück. Setzt eine Ausnahme und gibt bei einem Fehler-1zurück.value darf nicht
NULLsein.Hinzugefügt in Version 3.14.
-
double PyLong_AsDouble(PyObject *pylong)¶
- Teil der Stable ABI.
Gibt eine C double-Repräsentation von pylong zurück. pylong muss eine Instanz von
PyLongObjectsein.Löst
OverflowErroraus, wenn der Wert von pylong außerhalb des gültigen Bereichs für einen double liegt.Gibt bei einem Fehler
-1.0zurück. Verwenden SiePyErr_Occurred(), um dies zu unterscheiden.
-
void *PyLong_AsVoidPtr(PyObject *pylong)¶
- Teil der Stable ABI.
Konvertiert eine Python-Ganzzahl pylong in einen C void-Zeiger. Wenn pylong nicht konvertiert werden kann, wird ein
OverflowErrorausgelöst. Nur für Werte, die mitPyLong_FromVoidPtr()erstellt wurden, ist die Erzeugung eines nutzbaren void-Zeigers garantiert.Gibt bei einem Fehler
NULLzurück. Verwenden SiePyErr_Occurred(), um dies zu unterscheiden.
-
Py_ssize_t PyLong_AsNativeBytes(PyObject *pylong, void *buffer, Py_ssize_t n_bytes, int flags)¶
- Teil des Stable ABI seit Version 3.14.
Kopiert den Python-Ganzzahlwert pylong in einen nativen buffer der Größe n_bytes. Die flags können auf
-1gesetzt werden, um sich ähnlich wie bei einer C-Konvertierung zu verhalten, oder auf die unten dokumentierten Werte, um das Verhalten zu steuern.Gibt
-1mit einer ausgelösten Ausnahme bei einem Fehler zurück. Dies kann passieren, wenn pylong nicht als Ganzzahl interpretiert werden kann oder wenn pylong negativ war und das FlagPy_ASNATIVEBYTES_REJECT_NEGATIVEgesetzt war.Andernfalls wird die Anzahl der Bytes zurückgegeben, die zur Speicherung des Wertes benötigt werden. Wenn diese gleich n_bytes oder kleiner ist, wurde der gesamte Wert kopiert. Alle n_bytes des Puffers werden geschrieben: Große Puffer werden mit Nullen aufgefüllt.
Wenn der zurückgegebene Wert größer als n_bytes ist, wurde der Wert abgeschnitten: So viele der niedrigsten Bits des Wertes, wie hineinpassen, werden geschrieben, und die höheren Bits werden ignoriert. Dies entspricht dem typischen Verhalten eines C-Style-Downcasts.
Hinweis
Überlauf wird nicht als Fehler betrachtet. Wenn der zurückgegebene Wert größer als n_bytes ist, wurden die höchstwertigen Bits verworfen.
0wird niemals zurückgegeben.Werte werden immer als Zweierkomplement kopiert.
Anwendungsbeispiel
int32_t value; Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, &value, sizeof(value), -1); if (bytes < 0) { // Failed. A Python exception was set with the reason. return NULL; } else if (bytes <= (Py_ssize_t)sizeof(value)) { // Success! } else { // Overflow occurred, but 'value' contains the truncated // lowest bits of pylong. }
Wenn n_bytes null ist, gibt die Funktion die Größe eines Puffers zurück, der groß genug wäre, um den Wert zu speichern. Dies kann größer sein als technisch notwendig, aber nicht unangemessen. Wenn n_bytes=0, kann buffer
NULLsein.Hinweis
Die Übergabe von n_bytes=0 an diese Funktion ist keine genaue Methode zur Bestimmung der Bitlänge des Wertes.
Um auf den gesamten Python-Wert unbekannter Größe zuzugreifen, kann die Funktion zweimal aufgerufen werden: zuerst, um die Puffergröße zu bestimmen, dann, um ihn zu füllen.
// 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 ist entweder
-1(Py_ASNATIVEBYTES_DEFAULTS), um Standardeinstellungen auszuwählen, die sich am ehesten wie eine C-Konvertierung verhalten, oder eine Kombination aus den anderen Flags in der unten stehenden Tabelle. Beachten Sie, dass-1nicht mit anderen Flags kombiniert werden kann.Derzeit entspricht
-1Py_ASNATIVEBYTES_NATIVE_ENDIAN | Py_ASNATIVEBYTES_UNSIGNED_BUFFER.Flag
Wert
-
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¶
16Die Angabe von
Py_ASNATIVEBYTES_NATIVE_ENDIANüberschreibt alle anderen Endian-Flags. Die Übergabe von2ist reserviert.Standardmäßig wird ein ausreichender Puffer angefordert, um ein Vorzeichenbit einzuschließen. Beispielsweise wird bei der Konvertierung von 128 mit n_bytes=1 die Funktion 2 (oder mehr) zurückgeben, um ein Vorzeichenbit von Null zu speichern.
Wenn
Py_ASNATIVEBYTES_UNSIGNED_BUFFERangegeben ist, wird ein Vorzeichenbit von Null von den Größenberechnungen ausgeschlossen. Dies ermöglicht es beispielsweise, dass 128 in einen ein Byte großen Puffer passen. Wenn der Zielpuffer später als vorzeichenbehaftet behandelt wird, kann ein positiver Eingabewert negativ werden. Beachten Sie, dass das Flag die Behandlung von negativen Werten nicht beeinflusst: Für diese wird immer Platz für ein Vorzeichenbit angefordert.Die Angabe von
Py_ASNATIVEBYTES_REJECT_NEGATIVEführt zum Setzen einer Ausnahme, wenn pylong negativ ist. Ohne dieses Flag werden negative Werte kopiert, vorausgesetzt, es ist genügend Platz für mindestens ein Vorzeichenbit vorhanden, unabhängig davon, obPy_ASNATIVEBYTES_UNSIGNED_BUFFERangegeben wurde.Wenn
Py_ASNATIVEBYTES_ALLOW_INDEXangegeben ist und ein Wert übergeben wird, der keine Ganzzahl ist, wird zuerst dessen__index__()-Methode aufgerufen. Dies kann dazu führen, dass Python-Code ausgeführt wird und andere Threads ausgeführt werden dürfen, was zu Änderungen an anderen verwendeten Objekten oder Werten führen könnte. Wenn flags-1ist, ist diese Option nicht gesetzt und Nicht-Ganzzahlwerte lösenTypeErroraus.Hinweis
Mit den Standard-flags (
-1oder UNSIGNED_BUFFER ohne REJECT_NEGATIVE) können mehrere Python-Integer ohne Überlauf auf einen einzigen Wert abgebildet werden. Beispielsweise passen sowohl255als auch-1in einen ein Byte großen Puffer und setzen alle seine Bits. Dies entspricht dem typischen Verhalten von C-Konvertierungen.Hinzugefügt in Version 3.13.
-
Py_ASNATIVEBYTES_DEFAULTS¶
-
int PyLong_GetSign(PyObject *obj, int *sign)¶
Holt das Vorzeichen des Integer-Objekts obj.
Bei Erfolg wird *sign auf das Integer-Vorzeichen (0, -1 oder +1 für Null, negative oder positive Integer) gesetzt und 0 zurückgegeben.
Bei einem Fehler wird -1 zurückgegeben, wobei eine Ausnahme gesetzt wird. Diese Funktion ist immer erfolgreich, wenn obj ein
PyLongObjectoder eine Unterklasse davon ist.Hinzugefügt in Version 3.14.
-
int PyLong_IsPositive(PyObject *obj)¶
Prüft, ob das Integer-Objekt obj positiv ist (
obj > 0).Wenn obj eine Instanz von
PyLongObjectoder einer Unterklasse davon ist, wird 1 zurückgegeben, wenn es positiv ist, und 0 andernfalls. Andernfalls wird eine Ausnahme gesetzt und -1 zurückgegeben.Hinzugefügt in Version 3.14.
-
int PyLong_IsNegative(PyObject *obj)¶
Prüft, ob das Integer-Objekt obj negativ ist (
obj < 0).Wenn obj eine Instanz von
PyLongObjectoder einer Unterklasse davon ist, wird 1 zurückgegeben, wenn es negativ ist, und 0 andernfalls. Andernfalls wird eine Ausnahme gesetzt und -1 zurückgegeben.Hinzugefügt in Version 3.14.
-
int PyLong_IsZero(PyObject *obj)¶
Prüft, ob das Integer-Objekt obj Null ist.
Wenn obj eine Instanz von
PyLongObjectoder einer Unterklasse davon ist, wird 1 zurückgegeben, wenn es Null ist, und 0 andernfalls. Andernfalls wird eine Ausnahme gesetzt und -1 zurückgegeben.Hinzugefügt in Version 3.14.
-
PyObject *PyLong_GetInfo(void)¶
- Teil der Stable ABI.
Bei Erfolg wird ein schreibgeschütztes benanntes Tupel zurückgegeben, das Informationen über die interne Darstellung von Ganzzahlen in Python enthält. Die Beschreibung der einzelnen Felder finden Sie unter
sys.int_info.Bei einem Fehler wird
NULLmit einer gesetzten Ausnahme zurückgegeben.Hinzugefügt in Version 3.1.
-
int PyUnstable_Long_IsCompact(const PyLongObject *op)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Gibt 1 zurück, wenn op kompakt ist, andernfalls 0.
Diese Funktion ermöglicht es leistungskritischem Code, einen „Schnellweg“ für kleine Ganzzahlen zu implementieren. Für kompakte Werte verwenden Sie
PyUnstable_Long_CompactValue(); für andere fallen Sie auf einePyLong_As*-Funktion oderPyLong_AsNativeBytes()zurück.Die Geschwindigkeitssteigerung wird für die meisten Benutzer voraussichtlich vernachlässigbar sein.
Was genau als kompakt gilt, ist Implementierungsdetail und kann sich ändern.
Hinzugefügt in Version 3.12.
-
Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)¶
- Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.
Wenn op kompakt ist, wie von
PyUnstable_Long_IsCompact()bestimmt, wird sein Wert zurückgegeben.Andernfalls ist der Rückgabewert undefiniert.
Hinzugefügt in Version 3.12.
Export API¶
Hinzugefügt in Version 3.14.
-
struct PyLongLayout¶
Layout eines Arrays von „Ziffern“ („limbs“ in der GMP-Terminologie), das zur Darstellung des Absolutbetrags für Ganzzahlen beliebiger Präzision verwendet wird.
Verwenden Sie
PyLong_GetNativeLayout(), um das native Layout von Pythonint-Objekten zu erhalten, das intern für Ganzzahlen mit „groß genug“ absolutem Wert verwendet wird.Siehe auch
sys.int_info, das ähnliche Informationen in Python bereitstellt.-
uint8_t bits_per_digit¶
Bits pro Ziffer. Beispielsweise bedeutet eine 15-Bit-Ziffer, dass Bits 0-14 aussagekräftige Informationen enthalten.
-
uint8_t digit_size¶
Größe einer Ziffer in Bytes. Beispielsweise benötigt eine 15-Bit-Ziffer mindestens 2 Bytes.
-
int8_t digits_order¶
Reihenfolge der Ziffern
1für höchstwertige Ziffer zuerst-1für niederwertigste Ziffer zuerst
-
int8_t digit_endianness¶
Endianness der Ziffer
1für höchstwertiges Byte zuerst (Big-Endian)-1für niederwertigstes Byte zuerst (Little-Endian)
-
uint8_t bits_per_digit¶
-
const PyLongLayout *PyLong_GetNativeLayout(void)¶
Ruft das native Layout von Python
int-Objekten ab.Siehe die Struktur
PyLongLayout.Die Funktion darf nicht vor der Initialisierung von Python oder nach der Finalisierung von Python aufgerufen werden. Das zurückgegebene Layout ist bis zur Finalisierung von Python gültig. Das Layout ist für alle Python-Subinterpreter in einem Prozess dasselbe und kann daher gecacht werden.
-
struct PyLongExport¶
Export eines Python
int-Objekts.Es gibt zwei Fälle:
Wenn
digitsNULList, wird nur das Mitgliedvalueverwendet.Wenn
digitsnichtNULList, verwenden Sie die Membernegative,ndigitsunddigits.
-
int64_t value¶
Der native Ganzzahlwert des exportierten
int-Objekts. Nur gültig, wenndigitsNULList.
-
uint8_t negative¶
1, wenn die Zahl negativ ist,0andernfalls. Nur gültig, wenndigitsnichtNULList.
-
Py_ssize_t ndigits¶
Anzahl der Ziffern im
digits-Array. Nur gültig, wenndigitsnichtNULList.
-
const void *digits¶
Schreibgeschütztes Array von vorzeichenlosen Ziffern. Kann
NULLsein.
-
int PyLong_Export(PyObject *obj, PyLongExport *export_long)¶
Exportiert ein Python
int-Objekt.export_long muss auf eine vom Aufrufer zugewiesene
PyLongExport-Struktur zeigen. Es darf nichtNULLsein.Bei Erfolg wird *export_long gefüllt und
0zurückgegeben. Im Fehlerfall wird eine Ausnahme gesetzt und-1zurückgegeben.PyLong_FreeExport()muss aufgerufen werden, wenn der Export nicht mehr benötigt wird.CPython-Implementierungsdetail: Diese Funktion ist immer erfolgreich, wenn obj ein Python
int-Objekt oder eine Unterklasse davon ist.
-
void PyLong_FreeExport(PyLongExport *export_long)¶
Gibt den von
PyLong_Export()erstellten Export export_long frei.CPython-Implementierungsdetail: Der Aufruf von
PyLong_FreeExport()ist optional, wenn export_long->digitsNULList.
PyLongWriter API¶
Die PyLongWriter API kann verwendet werden, um eine Ganzzahl zu importieren.
Hinzugefügt in Version 3.14.
-
struct PyLongWriter¶
Eine Python
intWriter-Instanz.Die Instanz muss von
PyLongWriter_Finish()oderPyLongWriter_Discard()zerstört werden.
-
PyLongWriter *PyLongWriter_Create(int negative, Py_ssize_t ndigits, void **digits)¶
Erstellt einen
PyLongWriter.Bei Erfolg wird *digits zugewiesen und ein Writer zurückgegeben. Im Fehlerfall wird eine Ausnahme gesetzt und
NULLzurückgegeben.negative ist
1, wenn die Zahl negativ ist, und0andernfalls.ndigits ist die Anzahl der Ziffern im digits-Array. Es muss größer als 0 sein.
digits darf nicht NULL sein.
Nach einem erfolgreichen Aufruf dieser Funktion sollte der Aufrufer das Array von Ziffern digits füllen und dann
PyLongWriter_Finish()aufrufen, um eine Pythonintzu erhalten. Das Layout von digits wird durchPyLong_GetNativeLayout()beschrieben.Ziffern müssen im Bereich [
0;(1 << bits_per_digit) - 1] liegen (wobeibits_per_digitdie Anzahl der Bits pro Ziffer ist). Alle nicht verwendeten höchstwertigen Ziffern müssen auf0gesetzt werden.Alternativ kann
PyLongWriter_Discard()aufgerufen werden, um die Writer-Instanz zu zerstören, ohne einint-Objekt zu erstellen.
-
PyObject *PyLongWriter_Finish(PyLongWriter *writer)¶
- Rückgabewert: Neue Referenz.
Beendet einen von
PyLongWriter_Create()erstelltenPyLongWriter.Bei Erfolg wird ein Python
int-Objekt zurückgegeben. Im Fehlerfall wird eine Ausnahme gesetzt undNULLzurückgegeben.Die Funktion kümmert sich um die Normalisierung der Ziffern und konvertiert das Objekt bei Bedarf in eine kompakte Ganzzahl.
Die Writer-Instanz und das digits-Array sind nach dem Aufruf ungültig.
-
void PyLongWriter_Discard(PyLongWriter *writer)¶
Verwirft einen von
PyLongWriter_Create()erstelltenPyLongWriter.Wenn writer
NULList, wird keine Operation durchgeführt.Die Writer-Instanz und das digits-Array sind nach dem Aufruf ungültig.