常見相關書籍中說Python是一種「膠水語言」,即會用它來完成業務流程,而需要性能的核心模塊使用C/C++這樣的語言來寫。想請教下,具體上是如何做的呢?編譯C為可執行文件然後調用?還是編譯成庫?或者使用一些高級的語言綁定?

多謝!


我教你個野路子

1. 安裝 ecl (Embeddable Common Lisp)

2. 用 C 寫個簡單的 ecl 入口函數3. 用 Python 調用步驟 2 寫的 C 函數現在你就可以把所有的內容都用 Common Lisp 寫然後編譯成 .a / .so / .dll 在 Python 里用了

(逃


一個簡單的羅列,有空深入研究一下。PS:只是舉例,有些語言API不止一個

Python和C——Cython:Cython: C-Extensions for Python

Python和C++——Python Programming/Extending with C++

Python和R——rpy2:rpy2: R in Python

Python和Java——JPype:JPype documentation

Python和Julia——Julia:https://pypi.python.org/pypi/julia

Python和JavaScript——Python Package Index

Python和Stata—PyStata:cpbl/pystata

Python和SQL——python-sql:Python Package Index

Python和MongoDB——pymongo:PyMongo 3.5.1 Documentation


題主說的是一種方式,使用python直接調用c/c++的庫非常方便,但這種方式僅限於本地調用,而且調用C/C++以外的語言的效果不好說,反正我是沒試過。

我個人更傾向於使用python調用其他語言寫成的http、thrift或者其他rpc服務,這樣的系統耦合度低,彈性更好,在大並發的情況下更容易調優。


可以這麼理解,Python是語言的操作界面。

C語言等為了各種原因(主要是性能)有諸多對程序員不太不友好的性質,比如嚴格類型,函數沒有字面量,這些性質在編寫如操作系統,資料庫時是有益甚至必須的。

Python則能讓程序員更多的思考演算法本身,比如資料庫或文件的底層操作一般是C或C++寫的,使用Python介面調用;numpy的底層是用C優化過的,使用Python語法使得切片等操作更為簡便……

所謂「膠水」,其實是數據到應用的膠水,使用Python可以方便的寫出爬取網路數據或處理數據並圖形化輸出的程序。
Python 海量的第三方庫就是c寫的,很容易就用到了啊。其實Python只支持c語言,把其他語言的庫封裝出C介面,再封裝成Python的包就可以了。不過有很多庫和工具,支持如把C++直接封裝成Python庫的。
一個系統由多種語言編寫,但是這些語言怎麼相互鏈接呢?一種可能的方法就是,把不同的語言編寫的模塊打包起來,最外層使用python調用這些封裝好的包,這樣的話膠水語言的特性就體現出來了,但是」膠水的「只是一個形容詞,說python是膠水語言只是說了python眾多特性裡面的一種,實際上python的功能多了去了,任何語言的功能都是多了去了,只不過是沒有努力挖掘而已。
這個詞叫agostichttps://github.com/jupyter/jupyter/wiki/Jupyter-kernels?from=timelineisappinstalled=0
推薦閱讀:
相关文章