整數物件¶
所有整數都實現為任意大小的“長”整數物件。
發生錯誤時,大多數 PyLong_As*
API 返回 (return type)-1
,這與數字無法區分。請使用 PyErr_Occurred()
進行區分。
-
PyTypeObject PyLong_Type¶
- 作為 穩定 ABI 的一部分。
此
PyTypeObject
例項表示 Python 整數型別。這與 Python 層中的int
物件相同。
-
int PyLong_Check(PyObject *p)¶
如果其引數是
PyLongObject
或PyLongObject
的子型別,則返回 true。此函式始終成功。
-
int PyLong_CheckExact(PyObject *p)¶
如果其引數是
PyLongObject
,但不是PyLongObject
的子型別,則返回 true。此函式始終成功。
-
PyObject *PyLong_FromLong(long v)¶
- 返回值: 新引用。 穩定ABI 的一部分。
從 v 返回一個新的
PyLongObject
物件,失敗時返回NULL
。CPython 實現細節: CPython 為所有介於
-5
和256
之間的整數維護一個整數物件陣列。當您在此範圍內建立一個 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_t 或 int64_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_t 或 uint64_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
。如果 pend 非NULL
,則成功時 *pend 將指向 str 的末尾,錯誤時指向無法處理的第一個字元。如果 base 為0
,則使用 整數字面量 定義解釋 str;在這種情況下,非零十進位制數中的前導零會引發ValueError
。如果 base 不為0
,則它必須介於2
和36
之間(包括兩者)。忽略前導和尾隨空白以及基數說明符後和數字之間的單個下劃線。如果沒有數字,或者 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 整數,將其解釋為二進位制補碼有符號數。
flags 與
PyLong_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 整數,將其解釋為無符號數。
flags 與
PyLong_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 版本棄用: 該函式已軟棄用。
-
long PyLong_AS_LONG(PyObject *obj)¶
-
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_t 或 int64_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_t 或 uint64_t 表示。
如果 obj 不是
PyLongObject
的例項,則首先呼叫其__index__()
方法(如果存在)將其轉換為PyLongObject
。如果 obj 為負數,則引發
ValueError
。如果 obj 值超出範圍,則引發
OverflowError
。
成功時設定 *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=0,buffer 可以是
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 可以是
-1
(Py_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_NEGATIVE 的 UNSIGNED_BUFFER)下,多個 Python 整數可以在不溢位的情況下對映到單個值。例如,255
和-1
都適合單位元組緩衝區並設定其所有位。這與典型的 C 強制型別轉換行為匹配。在 3.13 版本加入。
-
Py_ASNATIVEBYTES_DEFAULTS¶
-
int PyLong_GetSign(PyObject *obj, int *sign)¶
獲取整數物件 obj 的符號。
成功時,將 *sign 設定為整數符號(零為 0,負整數為 -1,正整數為 +1),並返回 0。
失敗時,返回 -1 並設定異常。如果 obj 是
PyLongObject
或其子型別,則此函式始終成功。在 3.14 版本加入。
-
int PyLong_IsPositive(PyObject *obj)¶
檢查整數物件 obj 是否為正數 (
obj > 0
)。如果 obj 是
PyLongObject
的例項或其子型別,則在為正數時返回1
,否則返回0
。否則設定異常並返回-1
。在 3.14 版本加入。
-
int PyLong_IsNegative(PyObject *obj)¶
檢查整數物件 obj 是否為負數 (
obj < 0
)。如果 obj 是
PyLongObject
的例項或其子型別,則在為負數時返回1
,否則返回0
。否則設定異常並返回-1
。在 3.14 版本加入。
-
int PyLong_IsZero(PyObject *obj)¶
檢查整數物件 obj 是否為零。
如果 obj 是
PyLongObject
的例項或其子型別,則在為零時返回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()
獲取 Pythonint
物件的本機佈局,該佈局用於內部絕對值“足夠大”的整數。另請參閱
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
表示最低有效位元組在前(小端)
-
uint8_t bits_per_digit¶
-
const PyLongLayout *PyLong_GetNativeLayout(void)¶
獲取 Python
int
物件的本機佈局。請參閱
PyLongLayout
結構體。該函式不得在 Python 初始化之前或 Python 終結化之後呼叫。返回的佈局在 Python 終結化之前有效。該佈局對於程序中的所有 Python 子直譯器都是相同的,因此可以快取。
-
struct PyLongExport¶
Python
int
物件的匯出。有兩種情況
-
Py_ssize_t ndigits¶
-
const void *digits¶
無符號數字的只讀陣列。可以是
NULL
。
-
Py_ssize_t ndigits¶
-
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->digits 為
NULL
,則呼叫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
。如果數字為負,negative 為
1
,否則為0
。ndigits 是 digits 陣列中的位數。它必須大於 0。
digits 不能是 NULL。
成功呼叫此函式後,呼叫者應填充數字陣列 digits,然後呼叫
PyLongWriter_Finish()
以獲取一個 Pythonint
。digits 的佈局由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
。如果 writer 為
NULL
,則不執行任何操作。呼叫後,寫入器例項和 digits 陣列無效。