python扩展c语言,Python 的C语言扩展

本文介绍了如何在Linux Debian 4.0环境下安装Python 2.5-dev,然后使用C语言编写并封装一个阶乘函数,创建Python扩展模块。步骤包括编写C代码、编译和链接,并在Python环境中测试扩展模块。同样的过程也在Windows XP系统上进行了说明。
摘要由CSDN通过智能技术生成

操作系统:linux debian 4.0, python版本2.5

s1:安装python2.5-dev。因为Python.h是在dev包中才有。

test@debian:~/test_python_c$ aptitude search python2.5-dev

p python2.5-dev - Header files and a static library for Python.

test@debian:~/test_python_c$ sudo aptitude install python2.5-dev

...

test@debian:~/test_python_c$ aptitude search python2.5-dev

i python2.5-dev - Header files and a static library for Python.

s2:准备测试文件——C语言函数

//filename:example.c

int fact(int n)

{

if(n<=1)

return 1;

else

return n*fact(n-1);

}

s3: 编写封装接口

//filename: wrap.c

#include

PyObject* wrap_fact(PyObject* self, PyObject* args)

{

int n, result;

if (! PyArg_ParseTuple(args, "i:fact", &n))

return NULL;

result = fact(n);

return Py_BuildValue("i", result);

}

static PyMethodDef exampleMethods[] =

{

{"fact", wrap_fact, METH_VARARGS, "Caculate N!"},

{NULL, NULL}

};

void initexample()

{

PyObject* m;

m = Py_InitModule("example", exampleMethods);

}

s4:编译连接

gcc -fpic -c -I /usr/include/python2.5 -I /usr/lib/python2.5/config example.c wrap.c

gcc -shared -o example.so example.o wrap.o

test@debian:~/test_python_c$ ls

example.c example.o example.so wrap.c wrap.o

s5:测试example扩展模块

test@debian:~/test_python_c$ python

Python 2.5 (release25-maint, Jul 20 2008, 20:47:25)

[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>> import example

>>> dir(example)

['__doc__', '__file__', '__name__', 'fact']

>>> example.fact(5)

120

>>> example.fact(16)

2004189184

>>> example.fact(17)

-288522240

说明fact(17)的时候溢出了。

操作系统:windowsXP, python版本2.5

#TODO:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值