9

我想创建一个 Python 扩展,我真的很喜欢使用 Cython 的想法。主要是为了获得更多关于它的知识并利用速度增益(如果有的话)。我已经阅读了很多 Cython 文档,但我还不是计算机科学家,并且没有深入的知识来理解低级基础知识,因此我提出以下问题的原因:

我只是想知道,如果我在我正在开发的 Python 扩展中使用外部导入的(例如,ORM 或 SQL 库或任何其他 3rd 方库)会发生什么?

Cython 如何处理它?

如果这个导入的库/扩展是纯 Python 还是编译过的,有区别吗?

处理这个问题的正确方法是什么?

谢谢你。

PS。问题以粗体输入。

4

1 回答 1

9

cython 的目标是与 python 兼容,即你可以对任何 python 代码进行 cythonize 并且它将像以前一样工作。目前,大部分 python 代码已经可以工作了。Cython 还允许您优化部分代码并将其编译为更高效的 C 代码。

话虽如此,默认情况下任何 python 导入都将保持不变。对它们的任何调用都将作为 python 命令发出。即使模块是用 C 编写的,cython 也会通过 python 绕道来调用模块的函数。如果要直接使用 C 库,则必须为它们提供 cython 绑定。cython文档解释了如何执行此操作

通常,python 充当监督者并处理模块/类的范围。如果一个模块中的代码调用任何 python 函数(或访问 python 变量),python 将根据调用者的范围解析调用。如果被调用的函数恰好在第二个模块中,python 很乐意使用它。调用者只会得到结果,而不应该真正关心其他函数是否在不同的模块中。因此,关键是决定调用哪个函数的 python 范围规则。

于 2012-12-21T16:53:47.100 回答