複數物件¶
從 C API 的角度來看,Python 的複數物件實現為兩種不同的型別:一種是暴露給 Python 程式的 Python 物件,另一種是表示實際複數值的 C 結構。該 API 提供了用於處理這兩種型別的函式。
作為 C 結構的複數¶
請注意,接受這些結構作為引數並將其作為結果返回的函式是透過值而不是透過指標取消引用來執行的。這在整個 API 中是一致的。
-
type Py_complex¶
C 結構,它對應於 Python 複數物件的值部分。 大多數用於處理複數物件的函式都使用此型別的結構作為輸入或輸出值(視情況而定)。
該結構定義為
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)¶
返回複數 num 的取反,使用 C
Py_complex
表示形式。
-
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)¶
返回 num 的 exp 次冪,使用 C
Py_complex
表示形式。如果 num 為空且 exp 不是正實數,則此方法返回零並將
errno
設定為EDOM
。
作為 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 的一部分。
以 C double 型別返回 op 的實部。
如果 op 不是 Python 複數物件,但具有
__complex__()
方法,則會先呼叫此方法將 op 轉換為 Python 複數物件。如果未定義__complex__()
,則會回退到呼叫PyFloat_AsDouble()
並返回其結果。如果失敗,此方法會返回
-1.0
並設定異常,因此應呼叫PyErr_Occurred()
來檢查錯誤。在 3.13 版本中變更: 如果可用,則使用
__complex__()
。
-
double PyComplex_ImagAsDouble(PyObject *op)¶
- 穩定 ABI 的一部分。
以 C double 型別返回 op 的虛部。
如果 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__()
。