complex.md
1> **Источник:** https://python-all.ru/3.16/c-api/complex.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты комплексных чисел89#### `type PyComplexObject`1011Этот подтип [`PyObject`](https://python-all.ru/3.16/c-api/structures.html#c.PyObject) представляет объект комплексного числа Python.1213#### `Py_complex cval`1415Значение комплексного числа, использующее представление C [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).1617Устарело с версии 3.15, будет удалено в версии 3.20: Используйте [`PyComplex_AsCComplex()`](https://python-all.ru/3.16/c-api/complex.html#c.PyComplex_AsCComplex) и [`PyComplex_FromCComplex()`](https://python-all.ru/3.16/c-api/complex.html#c.PyComplex_FromCComplex) для преобразования комплексного числа Python в представление C [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex) и обратно.1819#### `PyTypeObject PyComplex_Type`2021*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*2223Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.16/c-api/type.html#c.PyTypeObject) представляет тип комплексного числа Python. Это тот же объект, что и [`complex`](https://python-all.ru/3.16/library/functions.html#complex) в слое Python.2425#### `int PyComplex_Check(PyObject *p)`2627Возвращает истину, если аргумент является [`PyComplexObject`](https://python-all.ru/3.16/c-api/complex.html#c.PyComplexObject) или подтипом `PyComplexObject`. Эта функция всегда завершается успешно.2829#### `int PyComplex_CheckExact(PyObject *p)`3031Возвращает истину, если аргумент является [`PyComplexObject`](https://python-all.ru/3.16/c-api/complex.html#c.PyComplexObject), но не подтипом `PyComplexObject`. Эта функция всегда завершается успешно.3233#### `PyObject *PyComplex_FromDoubles(double real, double imag)`3435*Возвращаемое значение: новая ссылка.*3637*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*3839Возвращает новый объект [`PyComplexObject`](https://python-all.ru/3.16/c-api/complex.html#c.PyComplexObject) из *real* и *imag*. В случае ошибки возвращает `NULL` с установленным исключением.4041#### `double PyComplex_RealAsDouble(PyObject *op)`4243*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*4445Возвращает действительную часть *op* как C double.4647Если *op* не является объектом комплексного числа Python, но имеет метод [`__complex__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__complex__), этот метод будет сначала вызван для преобразования *op* в объект комплексного числа Python. Если `__complex__()` не определён, то выполняется вызов [`PyFloat_AsDouble()`](https://python-all.ru/3.16/c-api/float.html#c.PyFloat_AsDouble) и возвращается его результат.4849При сбое этот метод возвращает `-1.0` с установленным исключением, поэтому следует вызвать [`PyErr_Occurred()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Occurred) для проверки ошибок.5051Изменено в версии 3.13: Используйте [`__complex__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__complex__), если доступно.5253#### `double PyComplex_ImagAsDouble(PyObject *op)`5455*Часть [Stable ABI](https://python-all.ru/3.16/c-api/stable.html#stable).*5657Возвращает мнимую часть *op* как C double.5859Если *op* не является объектом комплексного числа Python, но имеет метод [`__complex__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__complex__), этот метод будет сначала вызван для преобразования *op* в объект комплексного числа Python. Если `__complex__()` не определён, то выполняется вызов [`PyFloat_AsDouble()`](https://python-all.ru/3.16/c-api/float.html#c.PyFloat_AsDouble) и в случае успеха возвращается `0.0`.6061При сбое этот метод возвращает `-1.0` с установленным исключением, поэтому следует вызвать [`PyErr_Occurred()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Occurred) для проверки ошибок.6263Изменено в версии 3.13: Используйте [`__complex__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__complex__), если доступно.6465#### `type Py_complex`6667Эта структура C определяет формат экспорта для объекта комплексного числа Python.6869#### `double real`7071#### `double imag`7273Структура определяется как:7475```c76typedef struct {77 double real;78 double imag;79} Py_complex;80```8182#### `PyObject *PyComplex_FromCComplex(Py_complex v)`8384*Возвращаемое значение: новая ссылка.*8586Создаёт новый объект комплексного числа Python из значения C [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex). Возвращает `NULL` с установленным исключением в случае ошибки.8788#### `Py_complex PyComplex_AsCComplex(PyObject *op)`8990Возвращает значение [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex) комплексного числа *op*.9192Если *op* не является объектом комплексного числа Python, но имеет метод [`__complex__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__complex__), сначала вызывается этот метод для преобразования *op* в объект комплексного числа Python. Если `__complex__()` не определён, используется [`__float__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__float__). Если `__float__()` не определён, используется [`__index__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__index__).9394В случае ошибки метод возвращает [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex) с [`real`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex.real), установленным в `-1.0`, и с установленным исключением, поэтому для проверки ошибок следует вызвать [`PyErr_Occurred()`](https://python-all.ru/3.16/c-api/exceptions.html#c.PyErr_Occurred).9596Изменено в версии 3.8: Используйте [`__index__()`](https://python-all.ru/3.16/reference/datamodel.html#object.__index__), если доступно.9798## Комплексные числа как C-структуры99100API также предоставляет функции для работы с комплексными числами, использующие представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex). Обратите внимание, что функции, принимающие эти структуры в качестве параметров и возвращающие их как результаты, делают это *по значению*, а не через разыменование указателей.101102Обратите внимание, что эти функции [мягко устарели](https://python-all.ru/3.16/glossary.html#term-soft-deprecated) начиная с Python 3.15. Избегайте использования этого API в новом коде для арифметики комплексных чисел: используйте либо API [протокол Number](https://python-all.ru/3.16/c-api/number.html#number), либо встроенные комплексные типы, такие как double complex.103104#### `Py_complex _Py_c_sum(Py_complex left, Py_complex right)`105106Возвращает сумму двух комплексных чисел, используя C-представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).107108Устарело с версии 3.15.109110#### `Py_complex _Py_c_diff(Py_complex left, Py_complex right)`111112Возвращает разность двух комплексных чисел, используя C-представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).113114Устарело с версии 3.15.115116#### `Py_complex _Py_c_neg(Py_complex num)`117118Возвращает отрицание комплексного числа *num*, используя C-представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).119120Устарело с версии 3.15.121122#### `Py_complex _Py_c_prod(Py_complex left, Py_complex right)`123124Возвращает произведение двух комплексных чисел, используя C-представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).125126Устарело с версии 3.15.127128#### `Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)`129130Возвращает частное двух комплексных чисел, используя C-представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).131132Если *divisor* равен нулю, метод возвращает ноль и устанавливает `errno` в `EDOM`.133134Устарело с версии 3.15.135136#### `Py_complex _Py_c_pow(Py_complex num, Py_complex exp)`137138Возвращает возведение *num* в степень *exp*, используя C-представление [`Py_complex`](https://python-all.ru/3.16/c-api/complex.html#c.Py_complex).139140Если *num* равен нулю, а *exp* не является положительным действительным числом, метод возвращает ноль и устанавливает `errno` в `EDOM`.141142Устанавливает `errno` в `ERANGE` при переполнении.143144Устарело с версии 3.15.145146#### `double _Py_c_abs(Py_complex num)`147148Возвращает абсолютное значение комплексного числа *num*.149150Устанавливает `errno` в `ERANGE` при переполнениях.151152Устарело с версии 3.15.153