在我正在开发的项目中,我一直在将一些 python 函数和类转换为 cython。所以现在我有各种 .pyx 文件和相应的 .py 文件,它们包含基本相同的代码,cython 包括变量类型。但是,有时,cython 会包含对 python 代码的一些小的修改——(1)因为修改后的代码比保持相同的 python 形式更快(但等效)。
一开始我并不认为这种重复的代码会成为问题。此外,我计划定期比较 python 和 cython 实现的输出,以便我可以更快地发现对其中一个或另一个的任何意外修改。问题是我有更多的工作来保持两个实现同步,因为我发现了错误、进行改进等。这让我想知道这是否是使用 cython 的正确方法。
我知道理想情况下你会在 python 中完成你的所有项目,然后如果它很慢,找到热点并对它们进行 cythonize。但是,在我的项目中,我使用 python 作为 matlab 替代品来替代我正在开发的增强现实系统中的交互式原型算法。该系统是实时工作的,所以我经常在早期使用 cython 新算法以获得更高的 fps 并查看它的实时行为。
所以我的问题:
涉及大量 cython 代码的项目是否有重复代码?.pyx 文件和相应的 .py 文件?并让它们保持同步?还是他们只使用 cython 并直接在 cython 中开发新算法?那么就不会有重复的代码。但是,我无法在我最喜欢的 python IDE (wingIDE) 中调试 cython 代码。就此而言,我从来没有设法让 cygdb 在 Windows 7 中工作(在尝试了很长时间之后,我认为它只在 linux 中工作)所以我坚持使用 print 语句调试 cython 代码,这并不理想,而且基本上我放弃了我可以使用 python 和wingIDE 进行的所有交互式开发(类似matlab)。
然后是纯 python 模式http://docs.cython.org/src/tutorial/pure.html我喜欢使用 .pxd 文件来扩充我的 python 代码的想法,这样我就不会有重复代码的问题。我还没有尝试过,但我已经了解了一些限制,所以我不确定它是否足够好。另外,我不知道是否可以使用纯 python 模式从我在上面 (1) 中讨论的 python 代码中集成这些小的修改。这些可以放在 pxd 文件中吗?或者我是否必须有一个 pxy 文件才能进行修改?或者最好忘记修改任何内容。有没有人对纯python模式有很好的经验?
我不知道是否有另一种更好的使用 cython 的方法,所以如果你知道更好的方法,请告诉我们。