Я вполне уверен, что я не смотрю в нужных местах, потому что информацию по этой теме было чрезвычайно трудно найти.
У меня есть небольшая функция в C ++, которую вызывает Python, которая создает небольшой массив с плавающей точкой и возвращает их в Python.
Во-первых, кажется, что вы не можете использовать Py_BuildValue () для возврата массива произвольного размера в C ++ в виде списка в Python (мне неясно, почему это должно быть). Старый, но все еще актуальный пост Вот предлагает создать экземпляр объекта PyList, заполнить его элементами из массива, а затем вернуть его.
Что является приемлемым решением. Тем не менее, мои числа плавают в стиле C ++. Хотя библиотека Python предоставляет достаточно операций преобразования (строка C -> строка Python, C double -> число с плавающей точкой Python и т. Д.), Я не могу найти средства для простого преобразования числа с плавающей точкой C ++ в число с плавающей точкой Python. Я знаю, что плавающие числа Python эквивалентны двойным значениям в Си / Си ++, поэтому я полагаю, что я могу преобразовать плавающие числа в двойные, а затем в PyObject через PyFloat_FromDouble (), но я чувствую, что должен существовать более прямой способ сделать это.
Поскольку это чрезвычайно короткая функция и в значительной степени является доказательством концепции, я не чувствовал, что необходимо уделять время изучению SWIG, Boost Python или чего-то подобного; Я хотел бы сделать это с помощью встроенного Python / C ++ API. Любые предложения будут ценны!
С Питона float
по сути C double
, преобразование должно произойти в тот или иной момент. квотирование ссылка:
Python не поддерживает числа с плавающей запятой одинарной точности; Экономия на использовании процессора и памяти, которая обычно является причиной их использования, сводится на нет из-за накладных расходов на использование объектов в Python, поэтому нет смысла усложнять язык двумя типами чисел с плавающей запятой.
Так что конвертировать в double
(возможно, просто передав значение в функцию, которая принимает double
) и вы настроены.
Как также указывает текст, значения с плавающей точкой в python являются объектами, которые идут с небольшим количеством накладных расходов. PyFloat_FromDouble
позаботится о том, чтобы получить это право. Таким образом, выполнение этой функции — правильная вещь. То же самое относится и к созданию списка.