所以,这里是我的问题: 我在python中的代码,但我需要改善我的代码的一部分太慢的性能。一个好的(简单的)解决方案似乎是使用cython;我试过了,取得了很好的效果。 问题是我在我的Python代码中使用assert语句。在使用cython之前,我可以用-OO选项编译我的python代码,这样我就可以提供一个不执行任何断言测试的版本,并且仍然具有用于调试的断言。但是用cython编译的文件似乎总是执行断言。是否有一些选项可以传递给cython编译来删除(或不删除)断言?在cython中编译时如何去除python声明?
5
A
回答
7
如果您定义C预处理器宏PYREX_WITHOUT_ASSERTIONS
,Cython将跳过断言。因此,在编译生成的C文件时,将-DPYREX_WITHOUT_ASSERTIONS
传递给C编译器。如何取决于你的构建过程。
0
这也可以在PYPI (Python Package Index)发现和使用PIP是牵强。
这里的实现:
from pypreprocessor import pypreprocessor
pypreprocessor.parse()
#define debug
#ifdef debug
...place assert to be removed here...
#endif
这本质上的工作方式相同标准C预处理条件编译呢。
SideNote:这个模块兼容python2x和python3k。
声明:我是pypreprocessor的作者。
由于添加了预处理器阶段,这会使初始加载花费更长的时间,但输出的字节码(.pyc)将进行优化。
相关问题
- 1. 如何编译cython代码
- 2. 在Cython中声明文件指针
- 3. 在Mac上编译Cython时出错10.6
- 4. 数组声明和编译时间
- 5. 编译时声明字符串相等
- 6. 编译时的time_t声明问题
- 7. 使用Cython将Python编译为C
- 8. Python编译文件与Cython的exe
- 9. 使用Cython编译脚本的Python RecursionError
- 10. Cython编译错误
- 11. 如何在Cython中声明一个指针向量?
- 12. 不能编译ORMLite声明
- 13. Cython错误:声明不声明任何东西
- 14. 如何在omp编译指示中声明数组
- 15. Python如果在声明中
- 16. 如何在java eclipse中去除编译器优化?
- 17. “:: drem尚未声明”在MinGW/GCC中编译tvmet库时
- 18. 没有在类中声明成员函数 - 编译出错时
- 19. 在IntelliJ中编译Scala时声明失败
- 20. 用Cython:编译选项-O3
- 21. Cython文件无法编译
- 22. Buildozer不能编译用Cython
- 23. Cython编译器错误
- 24. Python源“编码未声明”
- 25. 编译时针对python 2和python 3编译的时候,Cython代码运行速度要慢125x
- 26. 声明在python
- 27. 如何在这个环节上使用用Cython编译器在Python
- 28. 用Cython递归结构声明
- 29. Cython - 正确声明C快乐
- 30. 在Ubuntu 10.04上编译时没有声明PATH_MAX
不知道......但怎么样让一个简单的程序来注释掉你想使用的文件中的所有python断言? – Ant 2010-11-26 12:46:04
+1:我自己发现了这个问题。奇怪的是,设计使代码更快的东西并不是对所有代码进行最简单的优化。 – 2010-11-26 13:01:29