复数对象 — Python 文档

来自菜鸟教程
Python/docs/3.8/c-api/complex
跳转至:导航、​搜索

复数对象

从 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 complex)
使用 C Py_complex 表示返回复数 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)

使用 C Py_complex 表示返回 num 乘以 exp 的幂。

如果 num 为空且 exp 不是正实数,则此方法返回零并将 errno 设置为 EDOM


复数作为 Python 对象

type PyComplexObject
PyObject 的这个子类型表示一个 Python 复数对象。
PyTypeObject PyComplex_Type
PyTypeObject 的这个实例表示 Python 复数类型。 它与 Python 层中的 complex 是同一个对象。
int PyComplex_Check(PyObject *p)
如果其参数是 PyComplexObjectPyComplexObject 的子类型,则返回 true。
int PyComplex_CheckExact(PyObject *p)
如果其参数是 PyComplexObject,但不是 PyComplexObject 的子类型,则返回 true。
PyObject *PyComplex_FromCComplex(Py_complex v)
从 C Py_complex 值创建一个新的 Python 复数对象。
PyObject *PyComplex_FromDoubles(double real, double imag)
realimag 返回一个新的 PyComplexObject 对象。
double PyComplex_RealAsDouble(PyObject *op)
op 的实部作为 C double 返回。
double PyComplex_ImagAsDouble(PyObject *op)
op 的虚部作为 C double 返回。
Py_complex PyComplex_AsCComplex(PyObject *op)

返回复数 opPy_complex 值。

如果 op 不是 Python 复数对象但具有 __complex__() 方法,则将首先调用该方法将 op 转换为 Python 复数对象。 如果 __complex__() 未定义,则回退到 __float__()。 如果 __float__() 未定义,则回退到 __index__()。 失败时,此方法返回 -1.0 作为实际值。

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