Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141339
  • 博文数量: 30
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-07 10:53
文章分类

全部博文(30)

文章存档

2009年(1)

2008年(29)

我的朋友

分类: Python/Ruby

2008-08-04 10:44:55

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
 
阅读(4305) | 评论(0) | 转发(0) |
0

上一篇:linux杂集

下一篇:python总结

给主人留下些什么吧!~~