嚴肅點
Python、C語言、C++聯合編程,可以發揮出C、C++的性能和Python的便利,我相信這是很多人一直想要的功能。但是網絡上一直沒有幾個課程來講述這個問題,所以我做了幾個視頻,系統談談自己在聯合編程實踐中遇到的坑,拋磚引玉。
真實點
C語言、C++太難用了,要是一直能用Python該多好了,無奈自己的身處工業制造行業,很多工具僅僅提供C、C++的SDK,其余的編程語言一律不提供。完全用C、C++開發,開發速度較慢,自身能力不太行、領導容易不滿,再加上人手不夠,時間節點不能總是卡在我這里吧。萬般無奈,思前想后的解決方式是對僅提供C、C++的SDK封裝一層后,交由Python調用,大部分的業務邏輯還是Python來完成。這樣做后,可以大大縮短工期,你好,我好,大家好。
沒有對比就沒有選擇困難
在努力尋找聯合編程的教程后,發現網絡上的文章很雜很亂,又很少,捋不清頭緒。不知道你是不是和像我一樣,找教程而不得。如果有,我下面的文字,一定會對你有所幫助。
先來一份自己的總結表格,梳理網上常見的解決方案:
結論:
- 如果僅僅用C語言,那么用Python自帶的ctypes庫就蠻好用的;
- 如果需要用C++,那么用boost-python和pybind11都可以;
- 如果你是圖像處理從業者,那么直接用opencv,就可以完成Python和C++的交互。
課程在哪里
ctypes
課程鏈接:Python ctypes和C語言交互
網易雲課堂搜索:ctypes
boost
課程鏈接:boost python和C++交互
網易雲課堂搜索:boost
opencv
課程鏈接:編譯自己的opencv-python
網易雲課堂搜索:opencv-python
常見問題
-
pybind11是現代的C++,boost-python歷史包袱太重,選擇哪一個?
我目前用的是boost-python,很重要原因是自帶的boost-numpy庫,可以很方便的和Python numpy進行交互,幫助文檔也較全。寫Python的,對numpy庫肯定不陌生,它太重要了。
boost被人詬病的一點就是編譯太復雜,容易出錯,我將在課程中論述其中的注意事項,我相信你學完后,會覺得編譯其實很簡單。 -
為什么opencv這個圖像庫也入選了?
opencv對於Python的封裝,本來就是基於numpy,而且官方的源碼也清楚明白,如果你經常使用opencv庫,直接看這個課程,肯定可以拓展你的技能樹。