Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在cython中编译时如何删除python断言?_Python_Assert_Cython - Fatal编程技术网

在cython中编译时如何删除python断言?

在cython中编译时如何删除python断言?,python,assert,cython,Python,Assert,Cython,所以,我的问题是: 我用python编写代码,但我需要改进代码中某些太慢的部分的性能。一个好的(简单的)解决方案似乎是使用cython;我试过了,结果很好。 问题是我在python代码中使用了assert语句。在使用cython之前,我可以使用-OO选项编译python代码,这样我就可以交付一个不执行任何断言测试的版本,并且仍然有用于调试的断言。但是用cython编译的文件似乎总是执行断言。是否有一些选项可以传递给cython编译来删除(或不删除)断言 如果您定义C预处理器宏PYREX\u而不定

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

如果您定义C预处理器宏
PYREX\u而不定义断言,Cython将跳过断言。因此,在编译生成的C文件时,将不带断言的
-DPYREX\u传递给C编译器。如何实现这一点取决于您的构建过程。

使用

也可以在上找到,并使用pip获取

以下是实现:

from pypreprocessor import pypreprocessor

pypreprocessor.parse()

#define debug

#ifdef debug
...place assert to be removed here...
#endif
这与标准C预处理器条件编译的工作原理基本相同

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

免责声明:我是pypreprocessor的作者


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

不知道……但是制作一个简单的程序来注释掉您想要使用的文件中的所有python断言怎么样?+1:我自己发现了这个问题。奇怪的是,一些旨在让你的代码快速的东西并没有做最简单的优化。谢谢你的快速回答。我使用的是Distutils方法,因此我必须检查如何将宏传递给编译器。没有断言的CYTHON\u也可以工作,尽管我们确实支持没有断言的PYREX\u以实现向后兼容性。