我一直在尝试了解Cython的工作原理。首先,我编写了一个名为test.pyx的文件,其中包含以下内容:
import numpy as np
a=2;b=3;
np.sum(a,b)
np.subtract(a,b)
我将在setup.py文件中包装此代码,
from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules = cythonize("test.pyx"))
我之后通过命令行运行test.pyx文件,如下所示:
python setup.py build_ext --inplace
这个命令会生成test.c代码。生成的C代码非常庞大且难以理解。现在,我只想知道在哪里可以找到np.sum(a,b)的实现。如果我成功地将Python转换为C翻译sum函数,我能否在其他C代码中使用它作为独立函数。这个函数是否有一些依赖关系,我需要一起复制它们。期待你们的好答案。
感谢大家的建议。查看html文件后,我看到的是:
+06: import numpy as np
__pyx_t_1 = __Pyx_Import(__pyx_n_s_numpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_np, __pyx_t_1) < 0) __PYX_ERR(0, 6, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
这意味着它正在调用 __pyx_n_s_numpy 模块。C编译器如何运行这个模块呢?我认为这个模块的实现是以.py格式存储的。
numpy.sum
的代码 - 它只是调用现有的函数。cython -a filename
将给您带注释的HTML,显示Cython代码转换为什么C代码。