第 20 章Python/C 集成
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
"我迷失在 C
在本书中,我们的程序都是用 Python 代码编写的。我们使用了 Python 以外的服务接口,并用 Python 语言编写了可重用的工具,但我们所有的工作都是在 Python 中完成的。尽管我们的程序规模庞大、功能强大,但它们始终是 Python 的产物。
对于许多程序员和脚本编写者来说,这种模式非常合理。事实上,这种独立编程是人们应用 Python 的主要方式之一。正如我们所看到的,Python 自带电池--与系统工具、互联网协议、图形用户界面、数据存储等的接口都已可用。此外,我们可能会遇到的大多数自定义任务在开源世界中都有预构建的解决方案;例如,PIL 系统允许我们通过运行自安装程序在 tkinter GUI 中处理图像。
但对于某些系统来说,Python 与用C 编程语言编写(或兼容)的组件集成的能力是一个至关重要的功能。事实上,Python 在大型系统中作为扩展语言和接口语言的角色,是它广受欢迎的原因之一,也是它为什么经常被称为 "脚本 "语言的原因。Python 的设计支持混合系统,即混合使用多种编程语言编写的组件。由于不同的语言有不同的优势,因此能够逐个组件地进行选择是一个强大的概念。您可以在任何需要灵活且相对易用的语言工具的地方将 Python 添加到混合系统中,而不会在重要的地方牺牲原始速度。
C 和 C++ 等编译语言对执行速度进行了优化,但对开发人员,特别是需要定制程序的最终用户来说,编程却很复杂。 由于 Python 对开发速度进行了优化,使用 Python 脚本来控制或定制用 C 或 C++ 编写的软件组件,可以产生更灵活的系统、更快的执行速度和更快的开发模式。例如,将纯 Python 程序的选定组件移到 C 语言中可以优化程序性能。此外,设计用于将定制工作委托给 Python 代码的系统不需要随附完整的源代码,也不需要最终用户学习复杂或专有的语言。
在本书的最后一个技术章节中,我们将简要介绍与 C 语言组件接口的工具,讨论 Python 作为嵌入式语言工具在其他系统中的应用能力,以及用 C 兼容语言实现的新模块扩展 Python 脚本的接口。我们还将简要探讨不那么针对 C 语言的其他集成技术,如 Jython。
请注意,我在上一段中说的是 "简短"。因为不是所有的 Python 程序员都需要掌握这个主题,因为它需要学习 C 语言代码和 makefile,还因为这是一本已经很深入的书的最后一章,所以本章省略了 Python 标准手册集和 Python 本身源代码中现成的细节。相反,在这里我们将快速浏览一些基本示例,帮助您开始这一领域的学习,并暗示这些示例对 Python 系统的可能性。
扩展和嵌入
在我们开始任何代码之前,我想首先定义一下我们这里所说的 "集成 "是什么意思。尽管这一术语的解释范围几乎与 "对象 "一样广泛,但本章的重点是紧密集成--即通过简单、直接和快速的进程内函数调用,在不同语言之间传输控制。虽然也可以使用 IPC 和网络工具(如本书前面探讨过的套接字和管道)不那么直接地连接应用程序的组件,但我们在本书的这一部分对更直接、更高效的技术感兴趣。
当你将 Python 与用 C(或其他编译语言)编写的组件混合时,Python 或 C 都可以 "在上面"。因此,有两种不同的集成模式和两种不同的 API:
- 扩展接口
用于从 Python 程序运行已编译的 C 库代码
- 嵌入界面 ...