復數對象?
從C API看,Python的復數對象由兩個(gè)不同的部分實(shí)現:一個(gè)是在Python程序使用的Python對象,另外的是一個(gè)代表真正復數值的C結構體。API提供了函數共同操作兩者。
表示復數的C結構體?
需要注意的是接受這些結構體的作為參數并當做結果返回的函數,都是傳遞“值”而不是引用指針。此規則適用于整個(gè)API。
-
type Py_complex?
這是一個(gè)對應Python復數對象的值部分的C結構體。絕大部分處理復數對象的函數都用這類(lèi)型的結構體作為輸入或者輸出值,它可近似地定義為:
typedef struct { double real; double imag; } Py_complex;
-
Py_complex _Py_c_sum(Py_complex left, Py_complex right)?
返回兩個(gè)復數的和,用 C 類(lèi)型
Py_complex
表示。
-
Py_complex _Py_c_diff(Py_complex left, Py_complex right)?
返回兩個(gè)復數的差,用 C 類(lèi)型
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)?
返回兩個(gè)復數的乘積,用 C 類(lèi)型
Py_complex
表示。
-
Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)?
返回兩個(gè)復數的商,用 C 類(lèi)型
Py_complex
表示。如果 divisor 為空,這個(gè)方法返回零并設置
errno
為EDOM
。
-
Py_complex _Py_c_pow(Py_complex num, Py_complex exp)?
返回 num 的 exp 次冪,用 C 類(lèi)型
Py_complex
表示。如果 num 為空且 exp 不是正實(shí)數,這個(gè)方法返回零并設置
errno
為EDOM
。
表示復數的Python對象?
-
PyTypeObject PyComplex_Type?
- Part of the Stable ABI.
這是個(gè)屬于
PyTypeObject
的代表Python復數類(lèi)型的實(shí)例。在Python層面的類(lèi)型complex
是同一個(gè)對象。
-
int PyComplex_Check(PyObject *p)?
如果它的參數是一個(gè)
PyComplexObject
或者PyComplexObject
的子類(lèi)型則返回真值。 此函數總是會(huì )成功執行。
-
int PyComplex_CheckExact(PyObject *p)?
如果它的參數是一個(gè)
PyComplexObject
但不是PyComplexObject
的子類(lèi)型則返回真值。 此函數總是會(huì )成功執行。
-
PyObject *PyComplex_FromCComplex(Py_complex v)?
- Return value: New reference.
根據C類(lèi)型
Py_complex
的值生成一個(gè)新的Python復數對象。
-
PyObject *PyComplex_FromDoubles(double real, double imag)?
- Return value: New reference. Part of the Stable ABI.
根據 real 和 imag 返回一個(gè)新的C類(lèi)型
PyComplexObject
對象。
-
double PyComplex_RealAsDouble(PyObject *op)?
- Part of the Stable ABI.
以C類(lèi)型 double 返回 op 的實(shí)部。
-
double PyComplex_ImagAsDouble(PyObject *op)?
- Part of the Stable ABI.
以C類(lèi)型 double 返回 op 的虛部。
-
Py_complex PyComplex_AsCComplex(PyObject *op)?
返回復數 op 的C類(lèi)型
Py_complex
值。如果 op 不是一個(gè) Python 復數對象,但是具有
__complex__()
方法,此方法將首先被調用,將 op 轉換為一個(gè) Python 復數對象。 如果__complex__()
未定義則將回退至__float__()
,如果__float__()
未定義則將回退至__index__()
。 如果失敗,此方法將返回-1.0
作為實(shí)數值。在 3.8 版更改: 如果可用將使用
__index__()
。