我很确定我找不到合适的地方,因为关于这个话题的信息非常难以获得。
我在C++中有一个小函数,它将被Python调用,并创建一个小的浮点数数组并将它们返回到Python。
首先,您似乎不能使用Py_BuildValue()将C++中任意大小的数组作为Python中的列表返回(我不清楚这是为什么)。一个老的但仍然相关的帖子这里建议实例化一个PyList对象,用数组中的元素填充它,然后返回它。
这是一个可以接受的解决方案。然而,我的数字是C++风格的浮动。虽然Python库提供了大量的转换操作(C字符串-> Python字符串、C双-> Python浮点数等),但我无法找到一种方法来简单地将C++浮点数转换为C++浮点数。我知道Python等同于C/C++双倍,所以我想我可以通过PyFloat_FromDouble()将浮点数转换为偶数,然后再转换到PyFloat_FromDouble(),但是我觉得必须有一种更直接的方法来实现这一点。
因为这是一个非常短的函数,并且在很大程度上是概念的证明,所以我不认为有必要花时间学习SWIG或Boost Python或somesuch;我想使用内置的Python/C++ API来实现这一点。如有任何建议,将不胜感激!
发布于 2014-07-14 22:05:49
由于Python本质上是一个C float,所以转换必须在某个时候发生。引用参考文献
Python不支持单精度浮点数;与在Python中使用对象的开销相比,处理器和内存的使用节省了很多,因此没有理由用两种浮点数来使语言复杂化。
因此,转换为double (可能只需将值传递给接受double的函数),您就被设置了。
正如文本所指出的,python中的浮点值是对象,具有相当大的开销。PyFloat_FromDouble会处理好这个问题的。因此,完成这个功能是正确的。列表创建的情况也是如此。
https://stackoverflow.com/questions/24745552
复制相似问题