c加加调用python_c中如何调用python?

c中调用python还不简单啊,既然python能调用c,并且把参数以PyObject类型传入到c,你想想python函数在python里面是什么类型,当然也是PyObject,万事万物皆PyObject,既然如此,你完全可以把函数作为PyObject传递给c嘛。为了凑点字数,下面搞点代码,若有人觉得眼熟,请当作没看见。

首先定义一个PyObject类型的指针,一会儿会让这个指针指向你的Python函数

static PyObject *my_callback = NULL;

然后定义一个返回PyObjec指针的函数,函数名随便,这个函数和python通信,所以第二个参数是你传递进来的python参数,然后用PyArg_ParseTuple解析参数,为了检验这个参数是不是函数,还需要进行PyCallable_Check的检查,看看是不是可调用的,如果不是,则报错,如果是则把函数传给my_callback。具体如下

PyObject *temp;

if (PyArg_ParseTuple(args, "O:set_callback", &temp)) {

if (!PyCallable_Check(temp)) {

PyErr_SetString(PyExc_TypeError, "parameter must be callable");

return NULL;

}

Py_XINCREF(temp); /* 给temp引用计数加1 */

Py_XDECREF(my_callback); /* 给my_callback引用计数减1 */

my_callback = temp;

}

接着就调用PyObject_CallObject回调my_callback引用的python函数,回调的参数需要用Py_BuildValue处理下,直接传c的类型可不行

int arg;

PyObject *arglist;

PyObject *result;

arg = 123;

arglist = Py_BuildValue("(i)", arg);

result = PyObject_CallObject(my_callback, arglist);

Py_DECREF(arglist);

大功告成,详细请看python官方文档吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值