> **Источник:** https://python-all.ru/2.6/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`**

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

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

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

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

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

.

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

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

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

.

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

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

*complex*

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

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

.

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

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

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

.

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

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

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

.

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

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

*num*

в степень

*exp*

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

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

.

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

**`PyComplexObject`**

Этот подтип

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

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

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

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

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

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

`complex`

и

`types.ComplexType`

.

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

Возвращает true, если аргумент является [`PyComplexObject`](https://python-all.ru/2.6/c-api/complex.html#PyComplexObject) или подтипом [`PyComplexObject`](https://python-all.ru/2.6/c-api/complex.html#PyComplexObject).

Изменено в версии 2.2: Теперь допускаются подтипы.

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

Возвращает true, если аргумент является [`PyComplexObject`](https://python-all.ru/2.6/c-api/complex.html#PyComplexObject), но не подтипом [`PyComplexObject`](https://python-all.ru/2.6/c-api/complex.html#PyComplexObject).

Новое в версии 2.2.

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

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

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

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

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

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

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

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

*op*

как C

`double`

.

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

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

*op*

как C

`double`

.

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

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

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