complex.md
1> **Источник:** https://python-all.ru/3.3/c-api/complex.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Объекты комплексных чисел89Объекты комплексных чисел в Python реализованы как два различных типа с точки зрения C API: один – это объект Python, доступный программам Python, а другой – структура C, представляющая фактическое значение комплексного числа. API предоставляет функции для работы с обоими.1011## Комплексные числа как C-структуры1213Обратите внимание, что функции, которые принимают эти структуры как параметры и возвращают их как результаты, делают это *по значению*, а не через разыменование указателей. Это единообразно во всём API.1415**`Py_complex`**1617Структура C, соответствующая части значения объекта комплексного числа Python. Большинство функций для работы с объектами комплексных чисел используют структуры этого типа как входные или выходные значения, в зависимости от ситуации. Она определена как:1819```c20typedef struct {21 double real;22 double imag;23} Py_complex;24```2526#### `Py_complex _Py_c_sum(Py_complex left, Py_complex right)`2728Возвращает сумму двух комплексных чисел, используя представление C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) .2930#### `Py_complex _Py_c_diff(Py_complex left, Py_complex right)`3132Возвращает разность двух комплексных чисел, используя представление C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) .3334#### `Py_complex _Py_c_neg(Py_complex complex)`3536Возвращает отрицание комплексного числа *complex*, используя представление C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) .3738#### `Py_complex _Py_c_prod(Py_complex left, Py_complex right)`3940Возвращает произведение двух комплексных чисел, используя представление C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) .4142#### `Py_complex _Py_c_quot(Py_complex dividend, Py_complex divisor)`4344Возвращает частное двух комплексных чисел, используя представление C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) .4546Если *divisor* равен нулю, этот метод возвращает ноль и устанавливает `errno` в `EDOM`.4748#### `Py_complex _Py_c_pow(Py_complex num, Py_complex exp)`4950Возвращает возведение *num* в степень *exp*, используя представление C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) .5152Если *num* равен нулю, а *exp* не является положительным вещественным числом, этот метод возвращает ноль и устанавливает `errno` в `EDOM`.5354## Комплексные числа как объекты Python5556**`PyComplexObject`**5758Этот подтип [`PyObject`](https://python-all.ru/3.3/c-api/structures.html#PyObject) представляет объект комплексного числа Python.5960**[PyTypeObject](https://python-all.ru/3.3/c-api/type.html#PyTypeObject) `PyComplex_Type`**6162Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.3/c-api/type.html#PyTypeObject) представляет тип комплексного числа Python. Это тот же объект, что и [`complex`](https://python-all.ru/3.3/library/functions.html#complex) на уровне Python.6364#### `int PyComplex_Check(PyObject *p)`6566Возвращает true, если аргумент является [`PyComplexObject`](https://python-all.ru/3.3/c-api/complex.html#PyComplexObject) или подтипом [`PyComplexObject`](https://python-all.ru/3.3/c-api/complex.html#PyComplexObject).6768#### `int PyComplex_CheckExact(PyObject *p)`6970Возвращает true, если аргумент является [`PyComplexObject`](https://python-all.ru/3.3/c-api/complex.html#PyComplexObject), но не подтипом [`PyComplexObject`](https://python-all.ru/3.3/c-api/complex.html#PyComplexObject).7172#### `PyObject* PyComplex_FromCComplex(Py_complex v)`7374*Возвращаемое значение: новая ссылка.*7576Создаёт новый объект комплексного числа Python из значения C [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex).7778#### `PyObject* PyComplex_FromDoubles(double real, double imag)`7980*Возвращаемое значение: новая ссылка.*8182Возвращает новый объект [`PyComplexObject`](https://python-all.ru/3.3/c-api/complex.html#PyComplexObject) из *real* и *imag*.8384#### `double PyComplex_RealAsDouble(PyObject *op)`8586Возвращает действительную часть *op* как C `double`.8788#### `double PyComplex_ImagAsDouble(PyObject *op)`8990Возвращает мнимую часть *op* как C `double`.9192#### `Py_complex PyComplex_AsCComplex(PyObject *op)`9394Возвращает значение [`Py_complex`](https://python-all.ru/3.3/c-api/complex.html#Py_complex) комплексного числа *op*.9596Если *op* не является объектом Python complex, но имеет метод [`__complex__()`](https://python-all.ru/3.3/reference/datamodel.html#object.__complex__), сначала будет вызван этот метод для преобразования *op* в объект Python complex. При неудаче этот метод возвращает `-1.0` как вещественное значение.97