当前位置: 首页 >> 程序设计 >> Python嵌入要点(c/c++版)
 

Python嵌入要点(c/c++版)

作者:      来源:ivyforgood.cublog.cn     发表时间:2008-09-27     浏览次数:      字号:    

python嵌入即在非python语言中使用python语言,这与python扩展正好相反。
 
扩展与嵌入的对象均是python语言:
嵌入即嵌入python,在其他语言中嵌入python,在其他语言中调用python;
扩展即扩展python,使用其他语言扩展python,在python中使用其他语言。
 
python嵌入一般流程如下:
先把一些数据从c的表示形式转化成python的表示形式。
然后调用python的API。
最后,把python的调用结果转化成c的表示形式。
 
转换c数据到python数据:
PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...)
 
PyObject* PyFloat_FromDouble(double v)
PyObject* PyInt_FromLong(long ival)
PyAPI_FUNC(PyObject *) PyString_FromString(const char *)
 
转换python数据到c数据:
PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...)
PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *, const char *,  char **, ...)
PyArg_Parse(不推荐使用)
 
PyAPI_FUNC(double) PyFloat_AsDouble(PyObject *pyfloat)
PyAPI_FUNC(long) PyInt_AsLong(PyObject *)
PyAPI_FUNC(char *) PyString_AsString(PyObject *)
 
调用python:
首先必不可少的要import:
PyAPI_FUNC(PyObject *) PyImport_ImportModule(const char *name)
 
调用函数:
PyAPI_FUNC(PyObject *) PyObject_CallMethod(PyObject *o, char *method, char *format, ...):
o.method(arg)
 
PyAPI_FUNC(PyObject *) PyObject_CallFunction(PyObject *callable_object, char *format, ...):
callable_object(arg)
 
PyAPI_FUNC(PyObject *) PyObject_CallObject(PyObject *callable_object, PyObject *args)
 
PyAPI_FUNC(PyObject *) PyObject_Call(PyObject *callable_object, PyObject *args, PyObject *kw):
args不能为NULL(PyObject_CallObject不受此限),此时()即空tuple可以接受。
 
其他函数:
Py_Initialize()、Py_Finalize
int PyRun_SimpleString(const char *cmd)
PyObject *PyModule_GetDict(PyObject *module) [相当于模块的__dict__属性]
PyObject *PyObject_GetAttrString(PyObject *obj, char *attr) [获取对象obj的attr属性或者函数]
 
引用计数:
部分返回borrowed reference的函数:
PyImport_GetModuleDict、PyModule_GetDict、
PyList_GetItem、PyList_GET_ITEM、PyTuple_GetItem、PyTuple_GET_ITEM
PyDict_GetItem、PyDict_GetItemString
 
部分steal reference的函数:
PyTuple_SetItem、PyTuple_SET_ITEM、PyList_SetItem、PyList_SET_ITEM

编辑 webmaster

 
 
 
评论更多>>
 
 
发表
 
姓名: QQ:
性别: MSN:
E-mail: 主页:
评分: 1 2 3 4 5
评论内容:
验证码:
  
  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
  • 用户需对自己在使用本站服务过程中的行为承担法律责任(直接或间接导致的)。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表网友个人观点,与本网站立场无关。
  •