> **Источник:** https://python-all.ru/3.0/c-api/complex.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

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

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

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

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

**\[Py\_complex\]`Py_complex`**

Структура C, соответствующая части значения объекта комплексного числа Python. Большинство функций для работы с объектами комплексных чисел используют структуры этого типа как входные или выходные значения, в зависимости от ситуации. Она определена как:

```c
typedef struct {
   double real;
   double imag;
} Py_complex;
```

**\[\_Py\_c\_sum\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `_Py_c_sum`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *left*, [Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *right*)**

Возвращает сумму двух комплексных чисел, используя представление C

[`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex)

.

**\[\_Py\_c\_diff\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `_Py_c_diff`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *left*, [Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *right*)**

Возвращает разность двух комплексных чисел, используя представление C

[`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex)

.

**\[\_Py\_c\_neg\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `_Py_c_neg`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *complex*)**

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

*complex*

, используя представление C

[`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex)

.

**\[\_Py\_c\_prod\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `_Py_c_prod`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *left*, [Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *right*)**

Возвращает произведение двух комплексных чисел, используя представление C

[`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex)

.

**\[\_Py\_c\_quot\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `_Py_c_quot`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *dividend*, [Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *divisor*)**

Возвращает частное двух комплексных чисел, используя представление C

[`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex)

.

**\[\_Py\_c\_pow\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `_Py_c_pow`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *num*, [Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *exp*)**

Возвращает возведение

*num*

в степень

*exp*

, используя представление C

[`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex)

.

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

**\[PyComplexObject\]`PyComplexObject`**

Этот подтип

[`PyObject`](https://python-all.ru/3.0/c-api/structures.html#PyObject)

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

**\[PyComplex\_Type\][PyTypeObject](https://python-all.ru/3.0/c-api/type.html#PyTypeObject) `PyComplex_Type`**

Этот экземпляр

[`PyTypeObject`](https://python-all.ru/3.0/c-api/type.html#PyTypeObject)

представляет тип комплексных чисел Python. Это тот же объект, что и

`complex`

и

`types.ComplexType`

.

**\[PyComplex\_Check\]int `PyComplex_Check`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*p*)**

Возвращает true, если аргумент является

[`PyComplexObject`](https://python-all.ru/3.0/c-api/complex.html#PyComplexObject)

или подтипом

[`PyComplexObject`](https://python-all.ru/3.0/c-api/complex.html#PyComplexObject)

.

**\[PyComplex\_CheckExact\]int `PyComplex_CheckExact`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*p*)**

Возвращает true, если аргумент является

[`PyComplexObject`](https://python-all.ru/3.0/c-api/complex.html#PyComplexObject)

, но не подтипом

[`PyComplexObject`](https://python-all.ru/3.0/c-api/complex.html#PyComplexObject)

.

**\[PyComplex\_FromCComplex\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyComplex_FromCComplex`([Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) *v*)**

*Возвращаемое значение: новая ссылка.*

Создаёт новый объект комплексного числа Python из значения C [`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex).

**\[PyComplex\_FromDoubles\][PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject)\* `PyComplex_FromDoubles`(double *real*, double *imag*)**

*Возвращаемое значение: новая ссылка.*

Возвращает новый объект [`PyComplexObject`](https://python-all.ru/3.0/c-api/complex.html#PyComplexObject) из *real* и *imag*.

**\[PyComplex\_RealAsDouble\]double `PyComplex_RealAsDouble`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*op*)**

Возвращает действительную часть

*op*

как C

`double`

.

**\[PyComplex\_ImagAsDouble\]double `PyComplex_ImagAsDouble`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*op*)**

Возвращает мнимую часть

*op*

как C

`double`

.

**\[PyComplex\_AsCComplex\][Py\_complex](https://python-all.ru/3.0/c-api/complex.html#Py_complex) `PyComplex_AsCComplex`([PyObject](https://python-all.ru/3.0/c-api/structures.html#PyObject) *\*op*)**

Возвращает значение [`Py_complex`](https://python-all.ru/3.0/c-api/complex.html#Py_complex) комплексного числа *op*.

Если *op* не является объектом комплексного числа Python, но имеет метод [`__complex__()`](https://python-all.ru/3.0/reference/datamodel.html#object.__complex__) , то сначала будет вызван этот метод для преобразования *op* в объект комплексного числа Python.
