我想创建一个Python扩展,我真的很喜欢使用Cython的想法。主要是为了获得更多关于它的知识,并利用速度增益,如果有的话。我已经阅读了相当多的Cython文档,但我还不是计算机科学家(还),并且没有深入的知识来理解低级基础知识,因此我提出以下问题的原因:
我只是想知道,如果我在我正在开发的Python扩展中使用外部导入(例如,ORM或SQL库或任何其他第三方库)会发生什么?
Cython如何处理它?</ strong>
如果此导入的库/扩展名是纯Python还是已编译,会有区别吗?
处理此问题的正确方法是什么?
谢谢。
PS。问题以粗体显示。
答案 0 :(得分:7)
cython的目标是与python兼容,即你可以对任何python代码进行cython化,它将像以前一样工作。目前,很大一部分python代码已经可以运行了。 Cython还允许您优化代码的一部分并将其编译为更高效的C代码。
据说任何python导入都会保留默认状态。对它们的任何调用都将作为python命令发出。即使模块是用C语言编写的,cython也会通过python绕道来调用模块的功能。如果要直接使用C库,则必须为它们安装cython。 cython documentation explains how to do this。
通常,python充当监督者并处理模块/类的范围。如果一个模块中的代码调用任何python函数(或访问python变量),python将根据调用者的范围解析调用。如果被调用的函数碰巧在第二个模块中,python很乐意使用它。调用者只会获得结果,并不应该真正关心其他函数是否在不同的模块中。因此关键是python的作用域规则决定调用哪个函数。