Об’єкти комплексних чисел

Об’єкти комплексних чисел Python реалізуються як два різних типи, якщо дивитися через C API: один є об’єктом 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.

If divisor is null, this method returns zero and sets errno to EDOM.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

Повертає піднесення num до степеня exp, використовуючи представлення C Py_complex.

If num is null and exp is not a positive real number, this method returns zero and sets errno to EDOM.

Комплексні числа як об’єкти Python

type PyComplexObject

Цей підтип PyObject представляє об’єкт комплексного числа Python.

PyTypeObject PyComplex_Type
Part of the Stable ABI.

Цей екземпляр PyTypeObject представляє тип комплексного числа Python. Це той самий об’єкт, що й complex на рівні Python.

int PyComplex_Check(PyObject *p)

Повертає true, якщо його аргумент є PyComplexObject або підтипом PyComplexObject. Ця функція завжди успішна.

int PyComplex_CheckExact(PyObject *p)

Повертає true, якщо його аргумент є PyComplexObject, але не підтипом PyComplexObject. Ця функція завжди успішна.

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

Створіть новий об’єкт комплексного числа Python зі значення C Py_complex.

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

Повертає новий об’єкт PyComplexObject із real і imag.

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

Return the real part of op as a C double.

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

Return the imaginary part of op as a C double.

Py_complex PyComplex_AsCComplex(PyObject *op)

Повертає значення Py_complex комплексного числа op.

If op is not a Python complex number object but has a __complex__() method, this method will first be called to convert op to a Python complex number object. If __complex__() is not defined then it falls back to __float__(). If __float__() is not defined then it falls back to __index__(). Upon failure, this method returns -1.0 as a real value.

Змінено в версії 3.8: Use __index__() if available.