常见相关书籍中说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
推荐阅读:
相关文章