整數物件

所有整數都實現為任意大小的“長”整數物件。

發生錯誤時,大多數 PyLong_As* API 返回 (return type)-1,這與數字無法區分。請使用 PyErr_Occurred() 進行區分。

type PyLongObject
受限 API 的一部分(作為不透明結構體)。

PyObject 子型別表示 Python 整數物件。

PyTypeObject PyLong_Type
作為 穩定 ABI 的一部分。

PyTypeObject 例項表示 Python 整數型別。這與 Python 層中的 int 物件相同。

int PyLong_Check(PyObject *p)

如果其引數是 PyLongObjectPyLongObject 的子型別,則返回 true。此函式始終成功。

int PyLong_CheckExact(PyObject *p)

如果其引數是 PyLongObject,但不是 PyLongObject 的子型別,則返回 true。此函式始終成功。

PyObject *PyLong_FromLong(long v)
返回值: 新引用。 穩定ABI 的一部分。

v 返回一個新的 PyLongObject 物件,失敗時返回 NULL

CPython 實現細節: CPython 為所有介於 -5256 之間的整數維護一個整數物件陣列。當您在此範圍內建立一個 int 時,您實際上只是獲得對現有物件的引用。

PyObject *PyLong_FromUnsignedLong(unsigned long v)
返回值: 新引用。 穩定ABI 的一部分。

從 C unsigned long 返回一個新的 PyLongObject 物件,失敗時返回 NULL

PyObject *PyLong_FromSsize_t(Py_ssize_t v)
返回值: 新引用。 穩定ABI 的一部分。

從 C Py_ssize_t 返回一個新的 PyLongObject 物件,失敗時返回 NULL

PyObject *PyLong_FromSize_t(size_t v)
返回值: 新引用。 穩定ABI 的一部分。

從 C size_t 返回一個新的 PyLongObject 物件,失敗時返回 NULL

PyObject *PyLong_FromLongLong(long long v)
返回值: 新引用。 穩定ABI 的一部分。

從 C long long 返回一個新的 PyLongObject 物件,失敗時返回 NULL

PyObject *PyLong_FromInt32(int32_t value)
PyObject *PyLong_FromInt64(int64_t value)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

從帶符號的 C int32_tint64_t 返回一個新的 PyLongObject 物件,失敗時返回 NULL 並設定異常。

在 3.14 版本加入。

PyObject *PyLong_FromUnsignedLongLong(unsigned long long v)
返回值: 新引用。 穩定ABI 的一部分。

從 C unsigned long long 返回一個新的 PyLongObject 物件,失敗時返回 NULL

PyObject *PyLong_FromUInt32(uint32_t value)
PyObject *PyLong_FromUInt64(uint64_t value)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

從無符號 C uint32_tuint64_t 返回一個新的 PyLongObject 物件,失敗時返回 NULL 並設定異常。

在 3.14 版本加入。

PyObject *PyLong_FromDouble(double v)
返回值: 新引用。 穩定ABI 的一部分。

v 的整數部分返回一個新的 PyLongObject 物件,失敗時返回 NULL

PyObject *PyLong_FromString(const char *str, char **pend, int base)
返回值: 新引用。 穩定ABI 的一部分。

根據 str 中的字串值返回一個新的 PyLongObject,該字串值根據 base 中的基數進行解釋,失敗時返回 NULL。如果 pendNULL,則成功時 *pend 將指向 str 的末尾,錯誤時指向無法處理的第一個字元。如果 base0,則使用 整數字面量 定義解釋 str;在這種情況下,非零十進位制數中的前導零會引發 ValueError。如果 base 不為 0,則它必須介於 236 之間(包括兩者)。忽略前導和尾隨空白以及基數說明符後和數字之間的單個下劃線。如果沒有數字,或者 str 在數字和尾隨空白之後沒有以 NULL 結尾,則會引發 ValueError

參見

PyLong_AsNativeBytes()PyLong_FromNativeBytes() 函式可用於將 PyLongObject 轉換為以 256 為基數的位元組陣列,或從位元組陣列轉換而來。

PyObject *PyLong_FromUnicodeObject(PyObject *u, int base)
返回值:新引用。

將字串 u 中的 Unicode 數字序列轉換為 Python 整數值。

在 3.3 版本加入。

PyObject *PyLong_FromVoidPtr(void *p)
返回值: 新引用。 穩定ABI 的一部分。

從指標 p 建立一個 Python 整數。可以使用 PyLong_AsVoidPtr() 從結果值中檢索指標值。

PyObject *PyLong_FromNativeBytes(const void *buffer, size_t n_bytes, int flags)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

buffer 的前 n_bytes 中包含的值建立一個 Python 整數,將其解釋為二進位制補碼有符號數。

flagsPyLong_AsNativeBytes() 相同。傳入 -1 將選擇 CPython 編譯時使用的本機位元組序,並假定最高有效位是符號位。傳入 Py_ASNATIVEBYTES_UNSIGNED_BUFFER 將產生與呼叫 PyLong_FromUnsignedNativeBytes() 相同的結果。其他標誌將被忽略。

在 3.13 版本加入。

PyObject *PyLong_FromUnsignedNativeBytes(const void *buffer, size_t n_bytes, int flags)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

buffer 的前 n_bytes 中包含的值建立一個 Python 整數,將其解釋為無符號數。

flagsPyLong_AsNativeBytes() 相同。傳入 -1 將選擇 CPython 編譯時使用的本機位元組序,並假定最高有效位不是符號位。除了位元組序之外的其他標誌都將被忽略。

在 3.13 版本加入。

long PyLong_AsLong(PyObject *obj)
作為 穩定 ABI 的一部分。

返回 obj 的 C long 表示。如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 的值超出 long 的範圍,則引發 OverflowError

錯誤時返回 -1。使用 PyErr_Occurred() 進行區分。

3.8 版本發生變更: 使用 __index__()(如果可用)。

3.10 版本發生變更: 此函式將不再使用 __int__()

long PyLong_AS_LONG(PyObject *obj)

軟棄用 的別名。與首選的 PyLong_AsLong 完全等效。特別是,它可能因 OverflowError 或其他異常而失敗。

3.14 版本棄用: 該函式已軟棄用。

int PyLong_AsInt(PyObject *obj)
自 3.13 版本起成為 穩定 ABI 的一部分。

類似於 PyLong_AsLong(),但將結果儲存在 C int 中而不是 C long 中。

在 3.13 版本加入。

long PyLong_AsLongAndOverflow(PyObject *obj, int *overflow)
作為 穩定 ABI 的一部分。

返回 obj 的 C long 表示。如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 的值大於 LONG_MAX 或小於 LONG_MIN,則將 *overflow 分別設定為 1-1,並返回 -1;否則,將 *overflow 設定為 0。如果發生任何其他異常,則將 *overflow 設定為 0 並照常返回 -1

錯誤時返回 -1。使用 PyErr_Occurred() 進行區分。

3.8 版本發生變更: 使用 __index__()(如果可用)。

3.10 版本發生變更: 此函式將不再使用 __int__()

long long PyLong_AsLongLong(PyObject *obj)
作為 穩定 ABI 的一部分。

返回 obj 的 C long long 表示。如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 的值超出 long long 的範圍,則引發 OverflowError

錯誤時返回 -1。使用 PyErr_Occurred() 進行區分。

3.8 版本發生變更: 使用 __index__()(如果可用)。

3.10 版本發生變更: 此函式將不再使用 __int__()

long long PyLong_AsLongLongAndOverflow(PyObject *obj, int *overflow)
作為 穩定 ABI 的一部分。

返回 obj 的 C long long 表示。如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 的值大於 LLONG_MAX 或小於 LLONG_MIN,則將 *overflow 分別設定為 1-1,並返回 -1;否則,將 *overflow 設定為 0。如果發生任何其他異常,則將 *overflow 設定為 0 並照常返回 -1

錯誤時返回 -1。使用 PyErr_Occurred() 進行區分。

在 3.2 版本加入。

3.8 版本發生變更: 使用 __index__()(如果可用)。

3.10 版本發生變更: 此函式將不再使用 __int__()

Py_ssize_t PyLong_AsSsize_t(PyObject *pylong)
作為 穩定 ABI 的一部分。

返回 pylong 的 C Py_ssize_t 表示。pylong 必須是 PyLongObject 的例項。

如果 pylong 的值超出 Py_ssize_t 的範圍,則引發 OverflowError

錯誤時返回 -1。使用 PyErr_Occurred() 進行區分。

unsigned long PyLong_AsUnsignedLong(PyObject *pylong)
作為 穩定 ABI 的一部分。

返回 pylong 的 C unsigned long 表示。pylong 必須是 PyLongObject 的例項。

如果 pylong 的值超出 unsigned long 的範圍,則引發 OverflowError

錯誤時返回 (unsigned long)-1。使用 PyErr_Occurred() 進行區分。

size_t PyLong_AsSize_t(PyObject *pylong)
作為 穩定 ABI 的一部分。

返回 pylong 的 C size_t 表示。pylong 必須是 PyLongObject 的例項。

如果 pylong 的值超出 size_t 的範圍,則引發 OverflowError

錯誤時返回 (size_t)-1。使用 PyErr_Occurred() 進行區分。

unsigned long long PyLong_AsUnsignedLongLong(PyObject *pylong)
作為 穩定 ABI 的一部分。

返回 pylong 的 C unsigned long long 表示。pylong 必須是 PyLongObject 的例項。

如果 pylong 的值超出 unsigned long long 的範圍,則引發 OverflowError

錯誤時返回 (unsigned long long)-1。使用 PyErr_Occurred() 進行區分。

3.1 版本發生變更: pylong 現在引發 OverflowError,而不是 TypeError

unsigned long PyLong_AsUnsignedLongMask(PyObject *obj)
作為 穩定 ABI 的一部分。

返回 obj 的 C unsigned long 表示。如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 的值超出 unsigned long 的範圍,則返回該值對 ULONG_MAX + 1 的模數。

錯誤時返回 (unsigned long)-1。使用 PyErr_Occurred() 進行區分。

3.8 版本發生變更: 使用 __index__()(如果可用)。

3.10 版本發生變更: 此函式將不再使用 __int__()

unsigned long long PyLong_AsUnsignedLongLongMask(PyObject *obj)
作為 穩定 ABI 的一部分。

返回 obj 的 C unsigned long long 表示。如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 的值超出 unsigned long long 的範圍,則返回該值對 ULLONG_MAX + 1 的模數。

錯誤時返回 (unsigned long long)-1。使用 PyErr_Occurred() 進行區分。

3.8 版本發生變更: 使用 __index__()(如果可用)。

3.10 版本發生變更: 此函式將不再使用 __int__()

int PyLong_AsInt32(PyObject *obj, int32_t *value)
int PyLong_AsInt64(PyObject *obj, int64_t *value)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

*value 設定為 obj 的帶符號 C int32_tint64_t 表示。

如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

如果 obj 值超出範圍,則引發 OverflowError

成功時設定 *value 並返回 0。錯誤時設定異常並返回 -1

value 不得為 NULL

在 3.14 版本加入。

int PyLong_AsUInt32(PyObject *obj, uint32_t *value)
int PyLong_AsUInt64(PyObject *obj, uint64_t *value)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

*value 設定為 obj 的無符號 C uint32_tuint64_t 表示。

如果 obj 不是 PyLongObject 的例項,則首先呼叫其 __index__() 方法(如果存在)將其轉換為 PyLongObject

成功時設定 *value 並返回 0。錯誤時設定異常並返回 -1

value 不得為 NULL

在 3.14 版本加入。

double PyLong_AsDouble(PyObject *pylong)
作為 穩定 ABI 的一部分。

返回 pylong 的 C double 表示。pylong 必須是 PyLongObject 的例項。

如果 pylong 的值超出 double 的範圍,則引發 OverflowError

錯誤時返回 -1.0。使用 PyErr_Occurred() 進行區分。

void *PyLong_AsVoidPtr(PyObject *pylong)
作為 穩定 ABI 的一部分。

將 Python 整數 pylong 轉換為 C void 指標。如果 pylong 無法轉換,則會引發 OverflowError。這僅能保證為使用 PyLong_FromVoidPtr() 建立的值生成可用的 void 指標。

錯誤時返回 NULL。使用 PyErr_Occurred() 進行區分。

Py_ssize_t PyLong_AsNativeBytes(PyObject *pylong, void *buffer, Py_ssize_t n_bytes, int flags)
自 3.14 版本以來,作為 穩定 ABI 的一部分。

將 Python 整數值 pylong 複製到大小為 n_bytes 的本機 buffer 中。flags 可以設定為 -1 以使其行為類似於 C 強制型別轉換,或者設定為以下文件中的值以控制其行為。

錯誤時返回 -1 並引發異常。這可能發生在 pylong 無法解釋為整數,或者 pylong 為負數且設定了 Py_ASNATIVEBYTES_REJECT_NEGATIVE 標誌的情況下。

否則,返回儲存該值所需的位元組數。如果此值等於或小於 n_bytes,則整個值已被複制。緩衝區的全部 n_bytes 都被寫入:較大的緩衝區將用零填充。

如果返回的值大於 n_bytes,則該值已被截斷:值中最低的位(可容納的位數)被寫入,而較高的位被忽略。這與 C 風格的向下轉換的典型行為匹配。

備註

溢位不被視為錯誤。如果返回的值大於 n_bytes,則最高有效位已被丟棄。

0 永遠不會被返回。

值總是作為二進位制補碼複製。

使用示例

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.
}

n_bytes 設定為零將返回足以容納該值的緩衝區大小。這可能比技術上必要的大小要大,但不會不合理。如果 n_bytes=0buffer 可以是 NULL

備註

n_bytes=0 傳遞給此函式不是確定值位長度的準確方法。

要獲取未知大小的整個 Python 值,可以呼叫該函式兩次:首先確定緩衝區大小,然後填充它

// 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 可以是 -1Py_ASNATIVEBYTES_DEFAULTS)以選擇最像 C 強制型別轉換的預設值,也可以是下表中其他標誌的組合。請注意,-1 不能與其他標誌組合。

目前,-1 對應於 Py_ASNATIVEBYTES_NATIVE_ENDIAN | Py_ASNATIVEBYTES_UNSIGNED_BUFFER

Flag

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

指定 Py_ASNATIVEBYTES_NATIVE_ENDIAN 將覆蓋任何其他位元組序標誌。傳入 2 是保留值。

預設情況下,將請求足夠的緩衝區以包含符號位。例如,當將 128 轉換為 n_bytes=1 時,函式將返回 2(或更多)以儲存零符號位。

如果指定了 Py_ASNATIVEBYTES_UNSIGNED_BUFFER,則在大小計算中將省略零符號位。這允許,例如,128 適合單位元組緩衝區。如果目標緩衝區稍後被視為有符號,則正輸入值可能變為負數。請注意,該標誌不影響負值的處理:對於這些值,始終請求符號位的空間。

如果指定了 Py_ASNATIVEBYTES_REJECT_NEGATIVE,則如果 pylong 為負數,則會設定異常。如果沒有此標誌,只要有足夠的空間容納至少一個符號位,無論是否指定了 Py_ASNATIVEBYTES_UNSIGNED_BUFFER,都將複製負值。

如果指定了 Py_ASNATIVEBYTES_ALLOW_INDEX 並傳入非整數值,則將首先呼叫其 __index__() 方法。這可能導致 Python 程式碼執行並允許其他執行緒執行,這可能會導致其他物件或正在使用的值發生更改。當 flags-1 時,此選項未設定,非整數值將引發 TypeError

備註

在預設 flags-1,或不帶 REJECT_NEGATIVEUNSIGNED_BUFFER)下,多個 Python 整數可以在不溢位的情況下對映到單個值。例如,255-1 都適合單位元組緩衝區並設定其所有位。這與典型的 C 強制型別轉換行為匹配。

在 3.13 版本加入。

int PyLong_GetSign(PyObject *obj, int *sign)

獲取整數物件 obj 的符號。

成功時,將 *sign 設定為整數符號(零為 0,負整數為 -1,正整數為 +1),並返回 0。

失敗時,返回 -1 並設定異常。如果 objPyLongObject 或其子型別,則此函式始終成功。

在 3.14 版本加入。

int PyLong_IsPositive(PyObject *obj)

檢查整數物件 obj 是否為正數 (obj > 0)。

如果 objPyLongObject 的例項或其子型別,則在為正數時返回 1,否則返回 0。否則設定異常並返回 -1

在 3.14 版本加入。

int PyLong_IsNegative(PyObject *obj)

檢查整數物件 obj 是否為負數 (obj < 0)。

如果 objPyLongObject 的例項或其子型別,則在為負數時返回 1,否則返回 0。否則設定異常並返回 -1

在 3.14 版本加入。

int PyLong_IsZero(PyObject *obj)

檢查整數物件 obj 是否為零。

如果 objPyLongObject 的例項或其子型別,則在為零時返回 1,否則返回 0。否則設定異常並返回 -1

在 3.14 版本加入。

PyObject *PyLong_GetInfo(void)
作為 穩定 ABI 的一部分。

成功時,返回一個只讀的 命名元組,其中包含有關 Python 內部整數表示的資訊。有關各個欄位的描述,請參閱 sys.int_info

失敗時,返回 NULL 並設定異常。

在 3.1 版本加入。

int PyUnstable_Long_IsCompact(const PyLongObject *op)
這是一個不穩定 API。它可能會在次要版本中未經警告而更改。

如果 op 是緊湊的,則返回 1,否則返回 0。

此函式使對效能敏感的程式碼能夠為小整數實現“快速路徑”。對於緊湊值,請使用 PyUnstable_Long_CompactValue();對於其他值,請回退到 PyLong_As* 函式或 PyLong_AsNativeBytes()

對於大多數使用者來說,加速效果預計可以忽略不計。

哪些值被認為是緊湊的,這是一個實現細節,可能會發生變化。

3.12 新版功能.

Py_ssize_t PyUnstable_Long_CompactValue(const PyLongObject *op)
這是一個不穩定 API。它可能會在次要版本中未經警告而更改。

如果 op 緊湊(由 PyUnstable_Long_IsCompact() 確定),則返回其值。

否則,返回值為未定義。

3.12 新版功能.

匯出 API

在 3.14 版本加入。

struct PyLongLayout

“數字”(在 GMP 術語中為“limb”)陣列的佈局,用於表示任意精度整數的絕對值。

使用 PyLong_GetNativeLayout() 獲取 Python int 物件的本機佈局,該佈局用於內部絕對值“足夠大”的整數。

另請參閱 sys.int_info,它在 Python 中公開了類似的資訊。

uint8_t bits_per_digit

每位數字的位數。例如,15 位數字意味著位 0-14 包含有意義的資訊。

uint8_t digit_size

數字大小(以位元組為單位)。例如,15 位數字至少需要 2 位元組。

int8_t digits_order

數字順序

  • 1 表示最高有效數字在前

  • -1 表示最低有效數字在前

int8_t digit_endianness

數字位元組序

  • 1 表示最高有效位元組在前(大端)

  • -1 表示最低有效位元組在前(小端)

const PyLongLayout *PyLong_GetNativeLayout(void)

獲取 Python int 物件的本機佈局。

請參閱 PyLongLayout 結構體。

該函式不得在 Python 初始化之前或 Python 終結化之後呼叫。返回的佈局在 Python 終結化之前有效。該佈局對於程序中的所有 Python 子直譯器都是相同的,因此可以快取。

struct PyLongExport

Python int 物件的匯出。

有兩種情況

int64_t value

匯出 int 物件的本機整數值。僅當 digitsNULL 時有效。

uint8_t negative

如果數字為負,則為 1,否則為 0。僅當 digits 不為 NULL 時有效。

Py_ssize_t ndigits

digits 陣列中的數字數量。僅當 digits 不為 NULL 時有效。

const void *digits

無符號數字的只讀陣列。可以是 NULL

int PyLong_Export(PyObject *obj, PyLongExport *export_long)

匯出 Python int 物件。

export_long 必須指向呼叫者分配的 PyLongExport 結構體。它不能是 NULL

成功時,填充 *export_long 並返回 0。錯誤時,設定異常並返回 -1

當不再需要匯出時,必須呼叫 PyLong_FreeExport()

CPython 實現細節: 如果 obj 是 Python int 物件或其子類,此函式總是成功。

void PyLong_FreeExport(PyLongExport *export_long)

釋放由 PyLong_Export() 建立的匯出 export_long

CPython 實現細節: 如果 export_long->digitsNULL,則呼叫 PyLong_FreeExport() 是可選的。

PyLongWriter API

PyLongWriter API 可用於匯入整數。

在 3.14 版本加入。

struct PyLongWriter

一個 Python int 寫入器例項。

例項必須透過 PyLongWriter_Finish()PyLongWriter_Discard() 銷燬。

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

建立一個 PyLongWriter

成功時,分配 *digits 並返回一個寫入器。錯誤時,設定異常並返回 NULL

如果數字為負,negative1,否則為 0

ndigitsdigits 陣列中的位數。它必須大於 0。

digits 不能是 NULL。

成功呼叫此函式後,呼叫者應填充數字陣列 digits,然後呼叫 PyLongWriter_Finish() 以獲取一個 Python intdigits 的佈局由 PyLong_GetNativeLayout() 描述。

數字必須在 [0; (1 << bits_per_digit) - 1] 範圍內(其中 bits_per_digit 是每位的位數)。任何未使用的最高有效位必須設定為 0

或者,呼叫 PyLongWriter_Discard() 來銷燬寫入器例項而不建立 int 物件。

PyObject *PyLongWriter_Finish(PyLongWriter *writer)
返回值:新引用。

完成由 PyLongWriter_Create() 建立的 PyLongWriter

成功時,返回一個 Python int 物件。錯誤時,設定異常並返回 NULL

該函式負責對數字進行規範化,並在需要時將物件轉換為緊湊整數。

呼叫後,寫入器例項和 digits 陣列無效。

void PyLongWriter_Discard(PyLongWriter *writer)

丟棄由 PyLongWriter_Create() 建立的 PyLongWriter

如果 writerNULL,則不執行任何操作。

呼叫後,寫入器例項和 digits 陣列無效。