作家
登录

你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!

作者: 来源: 2017-12-12 09:34:03 阅读 我要评论

开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散

C说话是编程说话的祖母,然则跟着一代一代的编程说话长大年夜,所以祖母也是会拍在沙岸上的,很多小小伙伴应当都邑学过或者懂得C说话,因闻敉件系的会教嘛,然则Python我想很多人都没学过,下面小编给大年夜家介绍下,C说话和Python一路混淆编程会产生什么不一样的火花吧!

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

Hello Python!


在Windows下编译敕令为

在Mac OS X 下的编译敕令同上

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

产生可履行文件后,直接运行,结不雅为输出

1

2

Python库函数PyRun_SimpleString可以履行字符串情势的Python代码。

固然异常简单,但这段代码除了能用C说话动态生成一些Python代码之外,并没有什么竽暌姑处。我们须要的是C说话的数据构造可以或许和Python交互。

下面举个例子,比如说,有一天我们用Python写了一个功能特别强大年夜的函数:

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

大年夜上述代码可以窥见Python内部运行的方法:

  • 所有Python元素,module、function、tuple、string等等,实际上都是PyObject。C说话里把持它们,一律应用PyObject *。

  • Python的类型与C说话类许可以互相转换。Python类型XXX转换为C说话类型YYY要应用PyXXXAsYYY函数;C类型YYY转换为Python类型XXX要应用PyXXXFromYYY函数。

  • 也可以创建Python类型的变量,应用PyXXX_New可以创建类型为XXX的变量。

  • 若a是Tuple,则a[i] = b对应于 PyTupleSetItem(a,i,b),有来由信赖还有一个函数PyTupleGetItem完采取得某一项的值。

  • 不仅Python说话很优雅,Python的库函数API也异常优雅。

如今我们获得了一个C说话的函数了,可以写一个main测试它

编译的方法就用本节开首应用的办法。

在Linux/Mac OSX运行此示例之前,可能先须要设置情况变量:

bash:

1

2

export PYTHONPATH=.:$PYTHONPATH

csh:

1

2

setenv PYTHONPATH.:$PYTHONPATH

2 Python 调用 C/C++(基本篇)

这种做法称为Python扩大。

比如说,我们有一个功能强大年夜的C函数

2

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

除了功能强大年夜的函数great_function外,这个文件中还有以下部分:

  • 担保函数greatfunction。它负责将Python的参数转化为C的参数(PyArgParseTuple),调用实际的greatfunction,并处理great_function的返回值,最终返回给Python情况。

  • 导出表GreateModuleMethods。它负责告诉Python这个模块里有哪些函数可以被Python调用。导出表的名字可以随便起,每一项有4个参数:第一个参数是供给给Python情况的函数名称,第二个参数是greatfunction,即担保函数。第三个参数的含义是参数变长,第四个参数是一个解释性的字符串。导出表老是以{NULL, NULL, 0, NULL}停止。

  • Python 官方文档的┞封一章具体介绍了C/C++与Python的双向互动Extending and Embedding the Python Interpreter _ _

  • 导出函数initgreat_module。这个的名字不是任取的,是你的module名称添加前缀init。导出函数中将模块名称与导出表进行连接。

在Windows下面,在Visual Studio敕令提示符下编译这个文件的敕令是

你试过C说话和Python一路混淆编程吗?两者相加不是已经无敌了!

本部分参考材料

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)