複數物件¶
Python 的複數物件在 C API 中被視為兩種不同的型別實現:一種是暴露給 Python 程式的 Python 物件,另一種是表示實際複數值的 C 結構。該 API 提供了用於處理這兩種型別的功能。
作為 C 結構的複數¶
請注意,接受這些結構作為引數並將其作為結果返回的函式是“按值”而不是透過指標解引用來執行此操作的。這在整個 API 中保持一致。
-
type Py_complex¶
對應於 Python 複數物件的數值部分的 C 結構。大多數處理複數物件的函式都將此型別的結構用作輸入或輸出值,視情況而定。
該結構定義如下
typedef struct { double real; double imag; } Py_complex;
-
Py_complex _Py_c_sum(Py_complex left, Py_complex right)¶
使用 C
Py_complex
表示返回兩個複數的和。
-
Py_complex _Py_c_diff(Py_complex left, Py_complex right)¶
使用 C
Py_complex
表示返回兩個複數之間的差。
-
Py_complex _Py_c_neg(Py_complex num)¶
使用 C
Py_complex
表示返回複數 num 的負數。
-
Py_complex _Py_c_prod(Py_complex left, Py_complex right)¶
使用 C
Py_complex
表示返回兩個複數的積。
-
Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)¶
使用 C
Py_complex
表示返回兩個複數的商。如果 divisor 為空,此方法返回零並將
errno
設定為EDOM
。
-
Py_complex _Py_c_pow(Py_complex num, Py_complex exp)¶
使用 C
Py_complex
表示返回 num 的 exp 次冪。如果 num 為空且 exp 不是正實數,此方法返回零並將
errno
設定為EDOM
。溢位時將
errno
設定為ERANGE
。
作為 Python 物件的複數¶
-
PyTypeObject PyComplex_Type¶
- 作為 穩定 ABI 的一部分。
PyTypeObject
的這個例項表示 Python 複數型別。它與 Python 層中的complex
是同一個物件。
-
int PyComplex_Check(PyObject *p)¶
如果其引數是
PyComplexObject
或PyComplexObject
的子型別,則返回 true。此函式始終成功。
-
int PyComplex_CheckExact(PyObject *p)¶
如果其引數是
PyComplexObject
,但不是PyComplexObject
的子型別,則返回 true。此函式始終成功。
-
PyObject *PyComplex_FromCComplex(Py_complex v)¶
- 返回值:新引用。
從 C
Py_complex
值建立一個新的 Python 複數物件。失敗時返回NULL
並設定一個異常。
-
PyObject *PyComplex_FromDoubles(double real, double imag)¶
- 返回值: 新引用。 穩定ABI 的一部分。
從 real 和 imag 返回一個新的
PyComplexObject
物件。失敗時返回NULL
並設定一個異常。
-
double PyComplex_RealAsDouble(PyObject *op)¶
- 作為 穩定 ABI 的一部分。
將 op 的實部作為 C double 返回。
如果 op 不是 Python 複數物件但具有
__complex__()
方法,則首先呼叫此方法將 op 轉換為 Python 複數物件。如果未定義__complex__()
,則回退呼叫PyFloat_AsDouble()
並返回其結果。失敗時,此方法返回
-1.0
並設定一個異常,因此應呼叫PyErr_Occurred()
來檢查錯誤。3.13 版本中已更改: 如果可用,使用
__complex__()
。
-
double PyComplex_ImagAsDouble(PyObject *op)¶
- 作為 穩定 ABI 的一部分。
將 op 的虛部作為 C double 返回。
如果 op 不是 Python 複數物件但具有
__complex__()
方法,則首先呼叫此方法將 op 轉換為 Python 複數物件。如果未定義__complex__()
,則回退呼叫PyFloat_AsDouble()
並在成功時返回0.0
。失敗時,此方法返回
-1.0
並設定一個異常,因此應呼叫PyErr_Occurred()
來檢查錯誤。3.13 版本中已更改: 如果可用,使用
__complex__()
。
-
Py_complex PyComplex_AsCComplex(PyObject *op)¶
返回複數 op 的
Py_complex
值。如果 op 不是 Python 複數物件但具有
__complex__()
方法,則首先呼叫此方法將 op 轉換為 Python 複數物件。如果未定義__complex__()
,則回退到__float__()
。如果未定義__float__()
,則回退到__index__()
。失敗時,此方法返回
Py_complex
,其中real
設定為-1.0
並設定一個異常,因此應呼叫PyErr_Occurred()
來檢查錯誤。3.8 版本發生變更: 使用
__index__()
(如果可用)。