復數對象?

從C API看,Python的復數對象由兩個不同的部分實現:一個是在Python程序使用的Python對象,另外的是一個代表真正復數值的C結構體。API提供了函數共同操作兩者。

表示復數的C結構體?

需要注意的是接受這些結構體的作為參數并當做結果返回的函數,都是傳遞“值”而不是引用指針。此規(guī)則適用于整個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)?

返回復數 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 為空,這個方法返回零并設置 errnoEDOM

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)?

返回 numexp 次冪,用 C 類型 Py_complex 表示。

如果 num 為空且 exp 不是正實數,這個方法返回零并設置 errnoEDOM。

表示復數的Python對象?

type PyComplexObject?

這個C類型 PyObject 的子類型代表一個 Python 復數對象。

PyTypeObject PyComplex_Type?
Part of the Stable ABI.

這是個屬于 PyTypeObject 的代表Python復數類型的實例。在Python層面的類型 complex 是同一個對象。

int PyComplex_Check(PyObject *p)?

如果它的參數是一個 PyComplexObject 或者 PyComplexObject 的子類型則返回真值。 此函數總是會成功執(zhí)行。

int PyComplex_CheckExact(PyObject *p)?

如果它的參數是一個 PyComplexObject 但不是 PyComplexObject 的子類型則返回真值。 此函數總是會成功執(zhí)行。

PyObject *PyComplex_FromCComplex(Py_complex v)?
Return value: New reference.

根據C類型 Py_complex 的值生成一個新的Python復數對象。

PyObject *PyComplex_FromDoubles(double real, double imag)?
Return value: New reference. Part of the Stable ABI.

根據 realimag 返回一個新的C類型 PyComplexObject 對象。

double PyComplex_RealAsDouble(PyObject *op)?
Part of the Stable ABI.

以C類型 double 返回 op 的實部。

double PyComplex_ImagAsDouble(PyObject *op)?
Part of the Stable ABI.

以C類型 double 返回 op 的虛部。

Py_complex PyComplex_AsCComplex(PyObject *op)?

返回復數 op 的C類型 Py_complex 值。

如果 op 不是一個 Python 復數對象,但是具有 __complex__() 方法,此方法將首先被調用,將 op 轉換為一個 Python 復數對象。 如果 __complex__() 未定義則將回退至 __float__(),如果 __float__() 未定義則將回退至 __index__()。 如果失敗,此方法將返回 -1.0 作為實數值。

在 3.8 版更改: 如果可用將使用 __index__()