返回信息流python新兵,望各位帮我看看这个问题,谢谢。
C++代码里,用 PyEval_CallObject() 得到了python函数返回的形如(float, int)的tuple。现在要把这两个值分别赋给声明好的
double sum;
int count;
现在用
PyArg_ParseTuple(retTuple, "(d, i)", &sum, &count);无法正确将tuple里的两个值赋给sum和count。
而用
PyObject *element1 = PyTuple_GetItem(retTuple, 0);
PyObject *element2 = PyTuple_GetItem(retTuple, 1);
sum = PyFloat_AsDouble(element1);
count = PyInt_AsLong(element2);就可以正确工作。
不知我对PyArg_ParseTuple()的用法哪里不对,求大神指教。
这是一条镜像帖。来源:北邮人论坛 / python / #4801同步于 2015/1/9
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
[问题]和c++混合编程时PyArg_ParseTuple不正常工作
ReLive
2015/1/9镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
https://docs.python.org/3/extending/extending.html#extracting-parameters-in-extension-functions
是不是应该用"di"而不是"(d,i)"呢?
多谢暖神解答!不是format格式的问题。实际上在这个模块之前的部分里,调python函数用PyArg_BuildValue()时发现,format用"di"则无法正常生成参数tuple,但用"(d, i)"就可以。(目前系统里py版本是2.6,不知道为什么按文档里写的"di"就是不行。。。)
应用场景就是想在现有的cpp工程里,加入一些样本数据分析的功能。用py里的scipy.stats提供的函数可以直接实现,省去自己敲c++运算代码或是找代码的工作。
最后,用python是因为以前对它还了解一点,对Lua完全木概念。。
【 在 nuanyangyang 的大作中提到: 】
: 另外楼主可以说说应用场景吗?为什么选用Python而不是Lua呢?
哦,如果是想用scipy就什么都能解释了。
lua比python轻量级,嵌入更简便。内存管理也比python好。但几乎没有现成的库。
【 在 ReLive 的大作中提到: 】
: 多谢暖神解答!不是format格式的问题。实际上在这个模块之前的部分里,调python函数用PyArg_BuildValue()时发现,format用"di"则无法正常生成参数tuple,但用"(d, i)"就可以。(目前系统里py版本是2.6,不知道为什么按文档里写的"di"就是不行。。。)
: 应用场景就是想在现有的cpp工程里,加入一些样本数据分析的功能。用py里的scipy.stats提供的函数可以直接实现,省去自己敲c++运算代码或是找代码的工作。
: 最后,用python是因为以前对它还了解一点,对Lua完全木概念。。
: ...................
来自「北邮人论坛手机版」