我一直在轉換爲cython一些python函數和我正在開發的一個項目中的類。所以現在我有各種.pyx文件和相應的.py文件,它們包含基本相同的代碼,而cython文件包括變量類型。但是,有時候,cython會包含一些python代碼的小修改 - (1),因爲修改後的代碼比保留相同的python表單更快(但是相當於)。我是否以正確的方式使用了cython?
在開始時,我並不認爲這種代碼的重複性會成爲問題。另外,我打算定期比較python和cython實現的輸出結果,以便我能夠更快地對任何一個或另一個進行無意的修改。問題是我有更多的工作來保持兩個實現同步,因爲我發現錯誤,進行改進等。這讓我想知道這是使用cython的正確方式。
我知道,理想情況下,你會做所有你的項目在Python中,然後如果它很慢,找到熱點和cythonize這些。然而,在我的項目中,我使用python作爲matlab替代品,以便在我正在開發的增強現實系統中交互式地對算法進行原型設計。該系統實時工作,所以我通常會盡早對新算法進行細化以獲得更高的fps,並瞭解它的實時表現。
所以我的問題:這涉及到很多用Cython代碼
待辦事項項目重複的代碼? .pyx文件和相應的.py文件?並保持同步?或者他們只使用cython並直接在cython中開發新的算法?那麼就不會有重複的代碼。但是,我無法在我最喜歡的python IDE(wingIDE)中調試cython代碼。對於這個問題,我從來沒有設法讓cygdb在Windows 7中工作(經過很長一段時間,我認爲它只能在linux下工作),所以我堅持用打印語句調試cython代碼,這並不理想,基本上我放鬆了我可以用python和wingIDE做的所有交互式開發(matlab like)。
然後是純python模式http://docs.cython.org/src/tutorial/pure.html我喜歡使用.pxd文件來擴充我的python代碼,然後我不會有重複的代碼問題。我還沒有嘗試過,但我已經閱讀了一些限制,所以我不確定它是否運行良好。另外,我不知道如果使用純python模式,我可以將上面(1)中提到的python代碼中的這些小修改集成到一起。這些可以放在一個pxd文件中嗎?或者我會不得不有一個pxy文件的修改?或者更好地忘記修改任何東西。有沒有人有純Python模式的良好體驗?
我不知道是否有另一種更好的方式使用cython,所以請,如果你知道更好的方式讓我們知道。
我不明白:你爲什麼「失去了所有的互動發展」?當你使用'cpdef'函數時,你可以在ipython中使用它們......你可以創建一個小的'.pyx'文件來測試代碼片段......你錯過了什麼?只是調試器? – 2013-03-14 12:08:42
是的。當我的意思是「交互式開發」時,我的意思是編寫代碼並在停止在斷點時對其進行測試,並訪問所有堆棧幀。 WingIDE調試器允許這樣做,而且這是我在python世界中發現的最接近我在matlab中開發時所發現的。我試過ipython,但我無法模仿這種類型的devloping與它。 – martinako 2013-03-14 13:18:53
至少有一個維護Python和Cython版本的有效參數:測試。 Python中的簡單實現可用於驗證Cython版本的結果,以及小問題實例。 – 2015-07-11 02:34:45