Python的C扩展

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);//创建一个模块对象
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值