本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如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来调用这三个方法。
     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 }
    c源程序

相关文章:

  • 2021-07-15
  • 2022-12-23
  • 2021-11-26
  • 2022-12-23
  • 2022-12-23
  • 2021-10-09
猜你喜欢
  • 2022-01-06
  • 2021-10-25
  • 2021-12-07
  • 2021-10-20
  • 2022-12-23
  • 2022-02-22
  • 2022-02-19
相关资源
相似解决方案