复数对象¶
从C API看,Python的复数对象由两个不同的部分实现:一个是在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)¶
返回复数 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
的子类型则返回真值。 此函数总是会成功执行。
-
int PyComplex_CheckExact(PyObject *p)¶
如果它的参数是一个
PyComplexObject
但不是PyComplexObject
的子类型则返回真值。 此函数总是会成功执行。
-
PyObject *PyComplex_FromCComplex(Py_complex v)¶
- 返回值:新的引用。
根据C类型
Py_complex
的值生成一个新的Python复数对象。
-
PyObject *PyComplex_FromDoubles(double real, double imag)¶
- 返回值:新的引用。 属于 稳定 ABI.
根据 real 和 imag 返回一个新的C类型
PyComplexObject
对象。
-
Py_complex PyComplex_AsCComplex(PyObject *op)¶
返回复数 op 的C类型
Py_complex
值。如果 op 不是一个 Python 复数对象但是具有
__complex__()
方法,则会先调用该方法将 op 转换为 Python 复数对象。 如果__complex__()
未定义则将回退至__float__()
。 如果__float__()
未定义则将回退至__index__()
。 当失败时,该方法将返回实数值-1.0
。在 3.8 版本发生变更: 如果可能将使用
__index__()
。