用C语言程序扩展Python模块实例教程

来源:http://www.sh-fengwen.com 作者:鲜果干果 人气:54 发布时间:2019-09-05
摘要:Python是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问,对媒体文件的访问

Python是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问,对媒体文件的访问等。而作为软件开发的传统编程语言C语言,却能在这些问题上很好地弥补Python语言的不足。

有时候需要用C程序来扩展Python程序。什么情况下需要用C程序来扩展Python呢?就我肤浅的理解,至少有如下场景:

BKJIA推荐阅读:专访豆瓣网首席架构师洪强宁:Python,简单的力量

1. 效率问题:尽管Python在编写程序的效率上非常高,其执行效率也不错,不过有些对性能非常关键的地方,还是有需求用C代码来实现,然后在Python中调用C程序,这样性能可能会更高一些。

概览

2. 充分利用优秀的C函数库:C语言世界中有些非常优秀的函数库(如:前面提及的libcurl),它们功能强大、性能优秀,如果能将这些C函数库进行简单的包装,然后就可以在Python中轻松调用,这样就非常好了。

Python是一种用于快速开发软件的编程语言,它的语法比较简单,易于掌握,但存在执行速度慢的问题,并且在处理某些问题时存在不足,如对计算机硬件系统的访问,对媒体文件的访问等。而作为软件开发的传统编程语言——C语言,却能在这些问题上很好地弥补Python语言的不足。因此,本文通过实例研究如何在Python程序中整合既有的C语言模块,包括用C语言编写的源程序和动态链接库等,从而充分发挥Python语言和C语言各自的优势。

根据官方指导文档,我写了个jay这个C扩展模块,里面有一个方法hello(用于给一个人打招呼^_^);需要一个C文件实现该模块的功能,需要一个setup.py脚本实现模块的编译安装部署。(setup.py是不是很熟悉呢? 在几乎每个Python库的源代码中都这个文件…)源代码都可以在: https://github.com/smilejay/python/tree/master/py2013 处直接获取。

Python语言的特点

1. C程序文件jaymodule.c的内容如下:(不详细解释其原理了,看文末的参考文档吧,我也担心我解释不清楚 ^_^)

Python作为一门程序开发语言,被越来越多地运用到快速程序开发。Python是一种解释型的,互动的,面向对象的编程语言,它包含了模块化的操作,异常处理,动态资料形态,以及类型的使用。它的语法表达优美易读,具有很多优秀的脚本语言的特点:解释的,面向对象的,内建的高级数据结构,支持模块和包,支持多种平台,可扩展。而且它还支持交互式方式运行,图形方式运行。它拥有众多的编程界面支持各种操作系统平台以及众多的各类函数库,利用C和C++可以对它进行扩充。

 代码如下

C语言的特点

#include <Python.h>
 
static PyObject * jay_hello(PyObject *self, PyObject *args) {
        const char *person;
        int sts;
        if (!PyArg_ParseTuple(args, "s", &person))
                return NULL;
        printf("Hello, %s. I'm Jay.n", person );
        return Py_None;
/*
        sts = printf("Hello, %s. I'm Jay.n", person );
        return Py_BuildValue("i", sts);
*/
}
 
static PyMethodDef JayMethods[] = {
        {"hello",  jay_hello, METH_VARARGS,
        "Say hello to a person from Jay."},
        {NULL, NULL, 0, NULL}        /* Sentinel */
};
 
PyMODINIT_FUNC initjay(void) {
        PyImport_AddModule("jay");
        (void) Py_InitModule("jay", JayMethods);
}
 
 
int main(int argc, char *argv[]) {
        /* Pass argv[0] to the Python interpreter */
        Py_SetProgramName(argv[0]);
 
        /* Initialize the Python interpreter.  Required. */
        Py_Initialize();
 
        /* Add a static module
        Py_Exit(0);
}

C语言作为最受人们欢迎的语言之一,有广泛的发展基础。简洁紧凑、灵活方便,功能强大是其特点。另外,C语言是一门中级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。由于可以直接访问物理地址,可以方便的对硬件进行操作。因此,很多的系统软件都是由C语言编写。

  1. setup.py这个构建和安装该模块的Python脚本如下:

Python语言与C语言的交互

 代码如下

本文由美高梅游戏平台网站发布于鲜果干果,转载请注明出处:用C语言程序扩展Python模块实例教程

关键词:

上一篇:Django连接数据库

下一篇:没有了

最火资讯