Пример использования функций/C++ C/C++ в языке python в среде jupyter.
Для начала необходимо написать и протестировать свой код.
Из файла dft.cpp
будет сформирована библиотека.
Проверка функций должна осуществляться в файле main.cpp
.
Когда код будет написан и протестирован, его следует закоммитить и загрузить на сервер.
Работа осуществляется с файлом pycxx.ipynb
.
Его можно открыть либо локально, если установлен сервис ipynb, либо в github-е через
сервис codespace
(познакомиться с codespace
можно здесь).
После загрузки среды нужно выбрать нужную версию python и запустить python-код.
Замечание: для компилирования C++-кода используется компилятор g++.
Если его нет в системе, следует использовать доступный на данной системе компилятор
(например, на Windows это cl.exe
).
В языке python можно запускать функции из динамических библиотек, собранных для языка C/C++.
Эту возможность предоставляет модуль ctypes
.
Есть некоторые ограничения использования языка C/C++.
- Все функции должны иметь манглинг языка C, а не C++.
Это ограничение можно обойти, явно задав манглинг
extern "C"
перед сигнатурой функции. - Можно использовать только примитивные типы: целочисленные типы, типы с плавающей запятой, указатели.
- Нельзя использовать STL в сигнатуре вызываемых в python-е функций.
Поэтому, например, вместо
std::vector
следует использовать указатель на данные и параметр размера вектора с типомsize_t
. - Нельзя возвращать объекты. Язык python не знает как конструировать объекты, поэтому невозможно их получить. Необходимо явно создать область памяти под объект и передать эту память в функцию в виде параметра.
- Выделение памяти под входные и выходные данные должно быть на стороне python.
Об этом можно не беспокоиться, если используется python-библиотека
numpy
. Все numpy-массивы в python имеют доступ к "сырому" указателю через методctype.data_as()
.