c++python中for循环倒序序输出问题

在这个人工智能和大数据当道的時代好像不会门编程语言就落后于时代了。

有同学问我:许良许良现在Python很火,我很想学但是学长又告诉我,还是学C++好一些

于是在編程语言的选择上,在C++和Python之间犹豫不决不知道到底该如何选择。

1.我上完了一门在自动驾驶Term1的线课程Term1的内容主要是机器视觉和深度学习嘚内容,里面编程语言是Python;

2.而Term2/Term3是主要是关于车辆定位、数据融合、路径规划和车辆控制的内容里面使用的语言是C++;

3.国庆期间花了5天时间紦C++课程学了一遍,截止到现在Term2已经完成,使用C++进行编程

针对这个问题,我说一下我的浅显的看法抛砖引玉,要是说的不好大家轻拍哈~

先说下Python和C++两者的差异。

Python为脚本语言(script language)需要边解释边运行。好处是不需要编译可以直接运行。坏处是由于边解释边运行运行效率慢。

而C++为编译语言(complier language)需要先编译再运行。好处是运行速度快尤其对于大型程序,效率提升明显坏处是程序更新后,需要重新编译运荇不是很方便。

Python语法简单语句简洁,使用方便上手容易,而且不需要编译可以即使运行尤其在Jupyter Notebook上运行,那叫一个得心应手所以財有“人生苦短,我用Python”之说

C++语法复杂,格式要求高使用不便,上手较难比如变量在使用前需声明(declaration),更不用提指针/虚函数之类想想都头大。

Python在人工智能领域占据有压倒性的优势有众多的库支持,大多数第三方库都是基于Python开发或者提供完整的API这也是为什么自动駕驶Term1使用Python语言的原因。

由于运行速度的优势C++在工业界占有统治性的地位,这也是为什么在自动驾驶Term2/Term3都是用C++语言的原因

所以,不用太纠結到底如何选择可以根据自己的应用场景和使用目的来选择。

如果只是追求实现功能对速度要求不高,请选择Python

如果需要追求运行效率,还是选择C++

如果是人工智能相关的领域,那还是别犹豫了直接Python吧~

欢迎大家关注头条号:我不是许良谁是许良,我会持续跟大家分享汽车圈/互联网圈的那些事儿

我做了个思维导图,供大家参考

Python是一种简单易学、功能强大的编程语言它有高效率的高层数据结构,能简单而有效地实现面向对象编程Python简洁的语法、对动态输入的支持和解释性语言的本质,使得它茬很多领域的大多数平台上都是一个理想的脚本语言特别适用于快速的应用程序开发。

C++继承了C语言的能力能够使用指针直接操作内存,也可以嵌入汇编语言以获得最快的运行速度它还支持面向对象、泛型编程等开发技术,可以在很高的层次上进行建模以获得高度的抽象,几乎所有领域的软件都可以使用C++完成开发

任何开发语言都不可能独当一面,包打天下总有它独特的优缺点。但如果把不同的编程语言结合起来使用却能发挥它的优点,弥补缺点Boost Python库正是解决C++和Python混合编程的利器。

Boost Python库的设计目标是简化Python与C++语言的交互可以方便地在Python囷C++之间自由转换,充分利用了C++的高级特性和新技术封装和屏蔽了很多底层实现,展现给应用层的是一个高度抽象、灵活和易于学习的接ロ只要开发者会编写C++程序,就可以立刻使用Boost Python库为Python编写扩展程序功能十分强大。此外Boost Python库全面支持C++和Python的各种特性例如:C++到Python的异常转换、默认参数、关键字参数、引用和指针等,可以让C++与Python可以近乎完美地对接

基于Boost Python库可以构建出C++与Python的混合软件系统,它的优势:

l 使用Python的动态特性、解释能力和大量标准化模块能够快速构建出可用的软件原型,利用C++改写其中运行效率低下的部分作为底层模块供Python调用。这样既拥囿Python的快速开发能力又有了C++的运行高效。

l Boost Python库实现了两种功能丰富的优秀语言环境间的无缝协作可以把软件系统的任何一个模块用这两种語言中的任意语言实现,系统中语言所占比例因需求变化而不同(侧重快速开发使用Python;侧重运行效率,使用C++)

对Boost Python库有了一个大致的概念后,为了帮助大家更快理解本文将会通过一些运行实例,为大家演示如何通过利用Boost Python库来实现C++和Python语言的混合编程

注意:char const name是Python模块中使用的函數名称,可以与C++的函数名不一样但要符合Python的语法规范。

通过上述步骤就完成了C++为Python编写扩展模块的全部代码开发,如此轻松便为Python编写了擴展是不是十分简单? 以下是Boost Python库能带来的便利:

l C++原有代码不用修改,为已存在的模块扩展到Python提供便利

l C++和Python解耦,解决了跨语言相互依赖的問题针对Python 2.X与3.X系列不兼容问题,只需要更换不同的编译库即可

完成了上面示例中代码的开发,接下来编译dll具体操作步骤如下:

2) 将DLL拷贝箌要使用的Python目录(新建的Python工作目录,可以是任意文件目录)下或者在系统环境变量配置该DLL的引用目录。

dll编译完成后我们接着看编写的擴展程序是如何在Python中使用的。

a) 从系统的目录中查找包名为Test的库查找成功则返回,否则继续;

b) 从当前目录中查找包名为Test的库查找成功则返回,否则报错

2) 调用TestHello函数,并将返回的结果使用print打印出来最终的执行结果如下:

至此,C++编写扩展模块及Python如何使用的示例已经全部完成叻十分简单,相信大家也对如何使用Boost Python库来实现C++与Python交互有了更近一步的理解

1) 细心的人可能注意到了,上面的示例并不包含参数而在实際的应用中可能包含不同类型的参数,这对实际应用的场景并不友好。Python中有六个可以按数据是否允许可变进行划分的标准数据类型:

那麼如何在Python和C++之间进行参数传递呢

Python是使用C语言开发出来的,其本身就是一个C库真正的Python在动态链接库里实现。所以C++中的一些数据类型在Python中昰直接可以使用的可以参考表1中数据:

表1中列举了C++和Python通用的数据类型,对于如何使用可能会有如下的几个问题:

1) 问题1通用数据类型如哬传递?

3) 问题3参数传递方式有两种:值传递和引用传递那么C++和Python交互的过程中,又是如何处理的顺便介绍一下值传递和引用传递的概念:

a) 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的徝,从而成为了实参的一个副本值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量嘚值

b) 引用传递(pass-by-reference)过程中,被调函数的形式参数虽然也作为局部变量在堆栈中开辟了内存空间但是这时存放的是由主调函数放进来的实参變量的地址。被调函数对形参的任何操作都被处理成间接寻址即通过堆栈中存放的地址访问主调函数中的实参变量。正因为如此被调函数对形参做的任何操作都影响了主调函数中的实参变量。

带着上面的问题我们通过一个例子来共同学习下Boost Python库对参数的处理机制。

1) TestInt函数展示了Python和C++通用数据类型的使用范例(代码4-10)表1中列举的范例都可以使用此种方式传递参数,有兴趣的可以尝试一下

通过上面的例子,我们對Boost Python库的工作原理有了大致了解:

总之Boost Python完全封装Python C API提供的接口,向开发者提供高度抽象、灵活和易于学习的接口

问题1、2已经有了答案,关於问题3我们需要通过Python代码以及运行结果解析运行机制才能找到答案。

结果解析我们可以得出如下结论:

以上就是利用Boost Python库实现C++和Python的交互忣参数传递相关问题的介绍,希望能给大家的工作带来帮助下一篇我们将介绍C++回调Python的技术手段,敬请关注!

我要回帖

更多关于 for循环倒序 的文章

 

随机推荐