当前位置:首页 期刊杂志

基于Python混合编程

时间:2024-08-31

薛建波,罗佳

(武汉虹旭信息技术有限责任公司, 湖北武汉,430074)

1 Python语言简介

Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。其设计具有很强的可读性,相比其他语言,Python具有特有的语法结构。Python支持广泛的应用程序开发,从简单的文字处理到web开发,以及数据库操作。Python的特点有以下几个方面:Python有相对比较少的关键字,结构简单,语法定义明确。Python代码使用空格对齐,更加便于阅读和理解。每一个模块有清晰的定义和调用说明,在软件完成以后的维护很容易。Python的易于学习和编写使其快速地流行。经过多年的发展和标准制定,Python提供了丰富的标准库。这些库文件安装可以通过Python命令进行。库文件的调用也十分简单。如果标准库中没有目标程序源码,用户可以自己通过c或者C++自我实现。也可以通过API对C和C++进行调用。Python支持所有的商业数据库的数据接口,支持GUI编程。提供成熟可靠的的web框架,简化的web开发的过程。不同用途或者功能的软件开发可能需要不同的语言进行编写。特定的语言提供了良好数据操作和简化后的编程逻辑。而Python提供了当前许多不同功能软件开发、操作的库。不同的程序,相同的语言进行实现,效率更高,兼容性更好。此外,Python还支持机器学习和创建数学模型。

2 基于Python的混合语言编程

使用Python进行混合编程有两种方式:扩展和嵌入。扩展是通过C、C++等系统语言实现Python的功能模块。嵌入是将Python解释器加载到应用程序中,使程序能够解释运行Python语言写成的脚本。两者都需要调用C语言应用程序接口。

2.1 需要扩展Python语言的理由

(1)添加/额外的(非Python)功能,提供Python核心功能中没有提供的部分,比如创建新的数据类型或者将Python嵌入到其它已经存在的应用程序中,则必须进行扩展编译。(2)性能瓶颈的效率提升。解释型语言一般比编译型语言慢,如果某一个模块处理的数据比较多,或者会频繁的操作IO,整个程序的运行速度会降低,形成程序的瓶颈。但是如果将所有的程序都用低级语言编写,会存在两个问题:一是工程量太大,不符合软件开发的初衷-高效率;二是有些模块,Python的运行效率与低级语言运行效率相差不大,不需要重新编译。(3)核心代码加密。因为Python是解释性语言,源代码没有私密性。将核心代码由Python语言转变为编译语言就变得很重要。

2.2 扩展的典型程序结构

(1)创建应用程序的源代码。(2)利用样板来包装代码。(3)创建setup.py进行编译,封装为Python的库。(4)通过Python解释器运行。

3 应用举例

下面以在Linux下面环境下进行文本检索的实例,介绍基于Python的混合编程。该程序实现了对格式化的文本进行检索,查找关键字,提取出包含关键字的数据段。程序运行环境:操作系统-Red Hat 4.4.7-3;编译器-GCC 4.4.7;Python解释器-Python 2.6.6。

3.1 创建程序源代码

在头文件中添加Python.h,里面包含了Python定义的所有的内部数据结构和C API函数原型。按照程序逻辑编写文本处理函数体。通过GCC编译其中的主程序。

3.2 进行模块封装

(1)对照C语言源代码,在文件中为每个模块的每一个函数增加PyObject* M_func()的包装函数。包装函数的目的是把python的值传递给c,再把c中函数的计算结果转换成Python对象返回给python。

(2)将每个模块增加一个PyMethodDef ModuleMethods[]的数组,为Python解释器提供调用入口:

(3)增加模块初始化函数void initMethod():

3.3 编译测试

(1)编写setup.py文件。

(2)执行setup文件,扩展的模块会被导入至Python的调用库。程序执行的时候,解释器找到模块的位置,进行调用。

(3)运行结果。在文本中找到的关键字数据,并且提取出了文本段。

在原始的文本数据量很大的情况下,扩展以后的数据检索速度明显快于纯Python脚本检索的速度。在此基础上,加入Python的机器学习的库文件进行程序功能的扩展,就能实现数据推荐功能。

4 结语

人工智能兴起带动了Python的发展。Google开源了Python机器学习源码,提供大量标准的Python机器学习库。Python的底层是由C/C++实现。运行速度低于编译语言。随着处理的数据量越来越大,对程序处理速度要求也会不断提升。混合语言编程以后肯定会应用的更加广泛。

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!