所以,這裏是我的問題: 我在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中聲明全局numpy.ndarray?
- 2. 如何編譯cython代碼
- 3. 在Cython中聲明文件指針
- 4. 在Mac上編譯Cython時出錯10.6
- 5. 編譯錯誤,同時聲明關閉
- 6. 編譯爲32位時未聲明QT_VERSION_MAJOR
- 7. 數組聲明和編譯時間
- 8. 編譯時的time_t聲明問題
- 9. 編譯時聲明字符串相等
- 10. 使用Cython將Python編譯爲C
- 11. 使用Cython編譯腳本的Python RecursionError
- 12. Python編譯文件與Cython的exe
- 13. 聲明編碼在Python
- 14. Cython編譯錯誤
- 15. 如何在Cython中聲明一個指針向量?
- 16. 編譯錯誤:聲明
- 17. 不能編譯ORMLite聲明
- 18. 如何使用cython編譯擴展?
- 19. Cython錯誤:聲明不聲明任何東西
- 20. 如何在omp編譯指示中聲明數組
- 21. Python如果在聲明中
- 22. 如何在java eclipse中去除編譯器優化?
- 23. 在任何平臺上運行用cython編譯的python
- 24. 聲明與準備聲明在預編譯方面
- 25. 編譯C++時無法讓Cython工作
- 26. 沒有在類中聲明成員函數 - 編譯出錯時
- 27. 「:: drem尚未聲明」在MinGW/GCC中編譯tvmet庫時
- 28. 在IntelliJ中編譯Scala時聲明失敗
- 29. 在PHP中使用編譯的python的Cython擴展?
- 30. 在數組聲明上編譯錯誤?
不知道......但怎麼樣讓一個簡單的程序來註釋掉你想使用的文件中的所有python斷言? – Ant 2010-11-26 12:46:04
+1:我自己發現了這個問題。奇怪的是,設計使代碼更快的東西並不是對所有代碼進行最簡單的優化。 – 2010-11-26 13:01:29