第7章 使用其他语言开发Python扩展
当编写基于Python的应用程序时,你不仅限于使用Python语言。在第3章中,简要提到过一些工具,如Hy。它允许你使用其他语言(Lisp的方言)编写模块,包,甚至整个应用程序,它们可以在Python虚拟机中正常运行。虽然它使你能够用完全不同的语法表达程序逻辑,但是它仍然是完全相同的语言,因为它最终被编译成相同的字节码。这意味着它具有与普通Python代码相同的限制。
- 由于GIL的存在,线程可用性大大降低。
- 它不编译。
- 它不提供静态类型和相关的优化。
扩展,使用完全不同的语言进行编写,并通过Python扩展API公开其接口,这种解决方案有助于克服上述核心限制。
本章将讨论用其他语言编写自己的扩展的主要原因,并介绍有助于创建它们的流行工具。你将会学习到以下内容。
- 如何使用Python/C API在C中编写简单的扩展。
- 如何使用Cython编写扩展。
- 扩展引入的主要挑战和问题是什么。
- 如何在不创建专用扩展并且仅使用Python代码的情况下与编译的动态库交互。
7.1 使用C或者C++编写扩展
当我们谈论使用不同语言的扩展时,我们几乎主要考虑C和C++。即使像Cython或Pyrex这样的工具,它们仅仅出于扩展的目的而提供了Python语言的超集,实际上它们只是源到源编译器,这种编译器可以使用扩展的类Python语法生成C代码。
当然,你可以在Python中使用任何语言编写的动态/共享库,只要可以这样编译,所以除了C和C++还是有别的方式。但共享库本质上是通用的。它们可以用于任何支持其加载的语言。因此,即使你使用完全不同的语言(例如说Delphi或Prolog)编写这样的库,如果不使用Python/C API,这样的库难以称之为Python扩展。 ...
Get Python高级编程(第2版) now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.