Python的C扩展

来源:互联网 发布:mac os 实用软件 编辑:程序博客网 时间:2024/06/05 08:31

1.Python 的C API 由C源码组成,并包含 “Python.h” 头文件

2.包装函数 PyObject * Module_func(PyObject *self,PyObject *args){...}

self 参数仅用于用C实现内置方法。如果定义的是函数,self为NULL。

args参数是一个指向Python的 tuple 对象的指针。每个tuple子项对应一个调用参数,这些参数全都是Python对象,所以需要先转成C值。

3.int PyArg_ParseTuple(PyObject *args,const char *format,...)

检查参数类型并转换成C值,使用模板字符串检测需要的参数类型。成功则返回1,出错返回0。

4.关于错误和异常

一个常见惯例是,函数发生错误时,应该设置一个异常环境并返回错误值(NULL)。异常存储在解释器静态全局变量中。

5.模块方法表

把函数声明为可以被Python调用,需要先定义一个方法表:

//模块方法表,包含多个数组,每个数组包含一个函数的信息static PyMethodDef ExtestMethods[]={{"fac",Extest_fac,METH_VARARGS},{"reverse",Extest_reverse,METH_VARARGS},{NULL,NULL}//NULL数组表示结尾};

其中,METH_VARARGS 常量表示参数以元组形式传入。

6.模块定义结构

//模块定义结构,保存创建一个模块对象所需的全部信息。static struct PyModuleDef ExtestModule={PyModuleDef_HEAD_INIT,"Extest",//模块名称NULL,//模块文档-1,ExtestMethods//方法数组};

7.模块初始化函数

//模块初始化函数,函数名必须为"PyInit_模块名"PyMODINIT_FUNC PyInit_Extest() {return PyModule_Create(&ExtestModule);//创建一个模块对象}


 

0 0
原创粉丝点击