6

所以,这是我的问题:我在 python 中编写代码,但我需要提高我的代码中某些部分太慢的性能。一个好的(和简单的)解决方案似乎是使用 cython;我试过了,结果很好。问题是我在 python 代码中使用了 assert 语句。在使用 cython 之前,我可以使用 -OO 选项编译我的 python 代码,这样我就可以交付一个不执行任何断言测试的版本,并且仍然拥有用于调试的断言。但是在 cython 中编译的文件似乎总是执行断言。是否有一些选项可以传递给 cython 编译以删除(或不删除)断言?

4

2 回答 2

10

如果您定义 C 预处理器宏,Cython 会跳过断言PYREX_WITHOUT_ASSERTIONS。所以-DPYREX_WITHOUT_ASSERTIONS在编译生成的C文件时传递给C编译器。如何做到这一点取决于您的构建过程。

于 2010-11-26T13:07:57.577 回答
-1

使用pypreprocessor

也可以在PYPI(Python 包索引)上找到并使用 pip 获取。

这是实现:

from pypreprocessor import pypreprocessor

pypreprocessor.parse()

#define debug

#ifdef debug
...place assert to be removed here...
#endif

这基本上与标准 C 预处理器条件编译的工作方式相同。

旁注:此模块与 python2x 和 python3k 兼容。

免责声明:我是 pypreprocessor 的作者。

由于添加了预处理器阶段,这将使初始加载花费更长的时间,但输出的字节码 (.pyc) 将得到优化。

于 2011-03-16T03:24:15.513 回答