本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!!
python语言可以对c程序代码进行调用,以弥补python语言低性能的缺点。当然,它也不是直接就可以调用,需要我们对c代码进行一些中间过程处理,其基本流程如下:
1.创建c程序功能代码
------------1.1创建.c源程序文件(py_test1.c)
------------1.2创建.h头文件(py_test1.h)
2.python类型适配,包装c代码(写包裹文件)(py_test1wrapper.c)
------------2.1.包含Python.h头文件(在python安装目录下的include目录下找到)
------------2.2.为每一个函数设置一个PyObject *Module_func()的包裹函数
------------2.3.为模块增加一个PyMethodDef ModuleMethods[]的数组
------------2.4.增加模块的初始化函数void initModule()
3.编译和测试
-------------3.1编译安装到python环境
--------------------3.1.1)创建setup.py
--------------------3.1.2)运行setup.py编译和链接c的扩展代码
-------------3.2测试
--------------------3.2.1)从Python中导入模块
--------------------3.2.2)测试
-
创建c程序功能代码
一、创建.c源程序文件py_test1.c
这是程序的具体功能代码,也就是python需要调用的c源程序。这里主要写了三个方法,最终我们就会实现python来调用这三个方法。c源程序1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<string.h> 4 5 6 //求阶乘 7 int fac(int n) { 8 if(n < 2) 9 return 1; 10 11 return n*fac(n-1); 12 } 13 14 15 16 //字符串逆序 17 char *reverse(char *s) { 18 //比如输入abcdefg,则返回gfedcba 19 char t,*p = s ,*q = (s+strlen(s)-1); 20 21 while(s && (p<q)) { 22 t = *p; 23 *p++ = *q; 24 *q-- = t; 25 } 26 27 return s; 28 } 29 30 31 int test(void) //测试main方法,改成普通的test方法 32 // int main(void) 33 { 34 char s[1024]; 35 36 printf("5! = %d\n",fac(5)); //5的阶乘 37 38 printf("10! = %d\n",fac(10)); // 10的阶乘 39 40 41 strcpy(s,"hello world"); 42 printf("reversing 'hello world',we get '%s'\n",reverse(s)); 43 44 return 0; 45 }