Объекты комплексных чисел

В Python’е объекты комплексных чисел реализуются в виде двух различных типов при просмотре из C API: одни является объектом Python, открытым для Python программ, а другой является структурой C, которая представляет действительное значение комплексного числа. API предоставляет функции для работы с обоими функциями.

Комплексные числа как C-структуры

Обратите внимание, что функции, которые принимают эти структуры в качестве параметров и возвращает их в качестве результатов, делают это по значению вместо того, чтобы обособлять их через указатели. Это согласовано во всем API.

Py_complex

Структура с, которая соответствует значащей части 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 complex)

Возвращает отрицание комплексного числа complex, используя представление 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 имеет значение null, этот метод возвращает нуль и устанавливает errno равным EDOM.

Py_complex _Py_c_pow(Py_complex num, Py_complex exp)

Возвращает возведение num в степень exp, используя представление C Py_complex.

Если num имеет значение null, а exp не является положительным вещественным числом, этот метод возвращает нуль и устанавливает errno равным EDOM.

Комплексные числа как объекты Python

PyComplexObject

Подтип PyObject представляет Python объект комплексного числа.

PyTypeObject PyComplex_Type

Сущность 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.

Возвращает новый объект PyComplexObject из real и imag.

double PyComplex_RealAsDouble(PyObject *op)

Возвращает реальную часть op как C double.

double PyComplex_ImagAsDouble(PyObject *op)

Возвращает мнимую часть op как C double.

Py_complex PyComplex_AsCComplex(PyObject *op)

Возвращает Py_complex значение комплексного числа op.

Если op не является объектом Python комплексного числа, но имеет метод __complex__(), этот метод будет сначала вызван для преобразования op в Python объект комплексного числа. Если __complex__() не определен, он возвращается __float__(). Если __float__() не определен, он возвращается к __index__(). При ошибке метод возвращает -1.0 как реальное значение.

Изменено в версии 3.8: Используйте __index__(), если возможно.