C++与Python的混合编程
python拓展编写
C++编写python的拓展。提高程序运行效率
我理解的一般流程:
- 编写自己的业务逻辑代码本例子如
1 | string add(int a,int b) |
- 包装为python函数,用于解析python传进来的参数
1 | PyObject* wrap_add(PyObject* self,PyObject* args); |
- 编写映射函数
1 | static PyMethodDef bintMethods[] = |
*.模块初始化函数
1 | void initbint() { |
如下
1 |
|
编译成动态链接库
1 | all: |
1 | import bint |
GitHub上有源码
C++调用Python
python的开发效率之高是毋庸置疑的,C++/C的语言性能之快也是让人羡慕的。这一次,鱼和熊掌是可以兼得的 :),混合编程,使得我们可以取之所长,游走在C与python之间。很多游戏开发中使用python来实现战斗脚本。
初始化调用
Py_Initialize();PyObject* PyImport_ImportModule (char *name)
一般都是通过(pmod = PyImport_ImportModule (“zhengji.app_context”)先来
加载一个模块(py脚本),得到一个PyObject *pmod对象,失败返回NULL类型获取某个方法或者类,PyObject * o是pmod
PyObject* PyObject_GetAttrString (PyObject *o, char *attr_name)
调用该方法 callable_object是第二步返回的指针
PyObject PyObject_CallFunction (PyObject *callable_object, char *format, …)
将PyObject* 返回char*
char* PyString_AsString (PyObject *string)结束初始化
Py_Finalize();
下面是script.py的内容
1 | #!/usr/bin/python |
C++调用Script.py
1 |
|
编译C++代码
1 | g++ zj.cpp -o zj -lpython2.7 |
输出结果
1 | zj@hp:~/tmp/CcalPy$ ./zj |