资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
The Difference Between Python and C+摘要:经过半个学期的程序设计语言原理的学习,根据本人课外所学的python和课程所学的C+编程语言,本人进行了粗略的对比,分别从二者的运行效率,执行方式,基本语法其中对二者关于面向对象中使用类的方法进行了个人观点的阐述。对于当今几种比较流行的编程语言,比较其中的不同点有助于帮助我们更加深刻的理解语言与语言之中的差异,一切为了更好的学习。关键字:python,C+,运行效率,执行方式,面向对象,类,差异语言介绍:C+融合了3中不同的编程传统:C语言代表的过程性传统、C+在C语言基础上添加的类代表的面向对象语言的传统以及C+模板支持的通用编程传统。在C+中,类是一种规范,它描述了这种新型数据格式,对象是根据这种规范构造的特定数据结构。为了应付C语言所面临的挑战,OOP提供了一种试图让语言来满足问题要求的一种新方法,其理念是设计与问题的本质特性相对应的数据格式。OOP程序设计方法首先设计类,它准确地描述了程序要处理的信息,这种技术涉及到许多新概念,如对象、类、封装、继承、多态等。C+诞生于贝尔实验室,由Bjarne Stroustrup于20世纪80年代开发出来,“C+主要是为了我的朋友和我不必再使用汇编语言、C语言或其它现代高级语言来编程而设计的。它的主要功能是可以方便地编写出好程序,让每个程序员更加快乐。”Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年。Python具有丰富和强大的库。它常被昵称为胶水语言,能够把用其他语言制作的各种模块(尤其是C/C+)很轻松地联结在一起。python是一种脚本语言,写好了就可以直接运行,省去了编译链接的麻烦,对于需要多动手实践的初学者而言,也就是少了出错的机会。而且python还有一种交互的方式,如果是一段简单的小程序,连编辑器都可以省了,直接敲进去就能运行。用缩进来表示程序的嵌套关系可谓是一种创举,把过去软性的编程风格升级为硬性的语法规定。再不需要在不同的风格间选择、再不需要为不同的风格争执。python中没有各种隐晦的缩写,不需要去强记各种奇怪的符号的含义。python写的程序很容易懂,这是不少人的共识。python是一种功能丰富的语言,它拥有一个强大的基本类库和数量众多的第三方扩展。python为程序员提供了丰富的基本功能使得人们写程序时用不着一切最底层做起。 运行效率1、运行效率:C+远大于python。python代码和C+代码最终都会转化成CPU指令执行,但一般情况下,python最终转换出来的CPU指令的量会比C+ 多好几倍。首先,python的东西比C+多,经过了更多层,python中甚至连数字都是对象。其次,python是解释执行的,和物理机CPU之间多了解释器这一层,而C+是编译执行的,直接就是机器码,编译的时候编译器还可以进行一些适当的优化。所以运行效率上C+远远优于python。2、开发效率:python 远大于 C+。有时候针对某一要求的实现,python的代码量是几行,而C+可能是超过百行。其中的一个例子就是用C+解析Json,也许对于一个比较资深的程序员猿都要调试个好几天,说不定调好了又造成内存泄漏。但是如果你用python的话,只需要import json然后进行操作,开发效率大大提高。所以从开发效率上,python要优于C+,正如俗话所说:人生苦短,我用Python。执行方式在我看来python和C+最大的不同在于两者的执行方式:python是解释执行而C+是编译执行的。一般的认为,程序有两种执行方式:解释执行和编译执行。解释程序:解释程序是一种高级语言翻译程序,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。这种特性非常适合于用户通过终端设备与计算机会话,比如在终端上打一条命令或语句,解释程序就立即将此语句解释成一条或几条指令并提交硬件立即执行且将执行结果反映到终端,从终端把命令打入后,就能立即得到计算结果。虽然这样子很方便,但是解释程序执行速度很慢,例如源程序中出现循环,则解释程序也重复地解释并提交执行这一组语句,这就造成很大浪费。 编译程序: 编译程序是一种很重要的语言处理程序,它把高级语言(如FORTRAN、COBOL、Pascal、C等)的源程序作为输入,进行翻译转换,产生出机器语言的目标程序,然后再让计算机去执行这个目标程序,得到计算结果。编译程序工作时,先进行词法分析和语法分析,然后进行代码优化,存储分配和代码生成,最终得到目标程序。为了完成这些分析综合任务,编译程序采用对源程序进行多次扫描的办法,每次扫描集中完成一项或多项任务或者一项任务分散到几次扫描。就像咱们矿大的编译课程所学:第一遍扫描做词法分析;第二遍扫描做语法分析;第三遍扫描做代码优化和存储分配;第四遍扫描做代码生成。 综上所示,大多数的编译程序直接产生机器语言的目标代码,形成可执行的目标文件,但也有的编译程序则先产生汇编语言一级的符号代码文件,然后再调用汇编程序进行翻译加工处理,最后产生可执行的机器语言目标文件。 PYTHON是一种脚本语言,是解释执行的,不需要经过编译,能够很好地实现跨平台,适用于一些小工具小程序的开发。相比之下,C+则是一种编译后运行的语言,在特定的机器上编译后在特定的机器上运行,运行效率高,安全稳定,但编译后的C+程序一般是不跨平台的。 在我看来,学习一种编程语言不能根据现在的热度,而是要根据它在某个领域的作用。就像汇编、VB,虽然现在似乎不能顺应时代的发展潮流,但是它在某些行业内还是有出色的一面。就目前而言,随着人工智能的发展,python渐渐成为潮流,在我看来,python确实非常强大,但在三五年内,不会作为一种主流的编程语言。例如在Windows程序开发领域内,还是C#、C+独占鳌头。我们不能盲目的夸赞一门编程语言而去贬低其他的编程语言,正所谓存在即合理,我们应该客观、辨证的看待这些编程语言并学会认真的学好程序设计原理,便于今后的发展顺应社会的潮流。简而言之,在实际应用中,对于需要经常使用的有大量计算的大型题目,采用速度较快的编译型的高级语言较好,如C+,虽然编译过程本身较为复杂,但一旦形成目标文件,以后可多次使用。相反,对于小型题目或计算简单不太费机时的题目,则多选用解释型的高级语言,如python,这样可以大大缩短编程及调试的时间,提高工作效率,节省时间的同时体验编程的乐趣。这里不得不说咱们矿大的课程安排甚是合理,让我们学生一开始就学习了C+,这为我们学习其他语言打下了坚实的基础,感觉分分钟就能上手任意一门其他的编程的语言。接下来将从类的角度比较python和C+的不同:(1)关于构建类的语法方面:C+构建类的例子:class XZQpublic: int num; void test() std:cout num endl; ;XZQ a;a.num = 20;a.test();输出结果为20,简单的分析程序:A类只有一个数据成员num和一个test函数用于输出num的值。 深层次的分析:当我们以实例对象XZQ调用test成员函数的时候,这个函数内部是通过this指针找到num,也就是说当执行test这段函数的代码的时候通过this指针找到这个和a对象绑定的num。c+的编译器会将上述的代码加工出现以下的半成品:class XZQpublic: int num; void test(this) std:cout num 调用,这样就很容易区分不同对象的调用访问的是各自对象的空间的内容。C+ 的编译器帮助我们完成this指针的传参,添加修饰的工作,不需要我们去写。关于这一点,在之前的C+课程上讲的特别清楚。Python构建类的例子:如果按照c+的方式将得到以下的代码:class XZQ: num = 20 def test(): print(num)a = XZQ()a.test()毫无疑问,这种C+式的python代码肯定会报错,首先一个问题就是在方法的调用上出错。执行报错会显示,test()实际上是没有参数的但是我们传递给他了1个参数。这是为什么?原因在于如果你是采用对象. python的调用对象的方法会像c+一样帮你传入一个标识是哪个对象调用的变量叫做self类似于C+的this指针,这个self是当前对象a的引用,也就是指向a所指向的内存空间上的那个对象。但是,python和C+毕竟语法上有些差异,如果上面这段代码在定义test函数的时候就没有给test写上self参数,虽然python编译器帮助我们在调用的时候传入引用给self但是并没有在定义的时候帮助我们添加这个参数,导致最终出错。class XZQ: num = 20 def test(self): print(self.num)a = XZQ()a.test()输出结果为20。综上所述,除了在实际语法形式上存在不同之外,python和c+在类对象调用方法上都是采用传入实例对象的指针或者引用的方式区分不同的调用对象的。在对类的操作中还有python和C+还有一个比较有意思的不同点:参考以下代码:class Test(object):num = 10def print(self): print(num)t = Test()num = 20t.print()在python中的输出结果是20。若是以C+的观念来判断的话,应该输出10。首先这个num是没有加self.修饰的这个num就不是指类Test当中定义的那个num,所以当对象t调用print方法的时候,虽然将t的引用传给了self,但是此时在函数的内部是没办法精确找到这个num的,因为这个num在函数内部是没有被定义的。Python还有访问引用的特点:(1)直接引用:直接使用引用的名字进行访问,Python按照搜索LEGB作用域的方式搜索名字。(2)间接访问:使用对象名.属性名的方式引用名字类中的属性,Python不搜索作用域,直接去对象里找属性。简单分析:num是往函数外层的嵌套作用域去寻找这个变量的定义自然就在全局区域找到这个num,所以输出的是20。Python和C+的方法和函数的概念完全不一样的。C+类的成员函数分为静态成员函数和普通成员函数。通过类名可以直接访问静态的成员,但是不能访问普通的成员和函数,普通的函数和成员是属于对象的需要this指针才能调用。相比于C+,对于python,是没有静态非静态的概念的,python的类当中定义的函数,通过实例调用就是实例的方法,通过类名调用就是一个函数。函数和方法不是一个类型。方法是被实例对象调用的,会被默认传入一个对象本身的引用给self参数,而通过类名调用的是从属于类的函数对象,这个函数在被调用的时候需要显示的传入实例对象作为参数。这两种调用的方式产生的结果是一样的。在python中,一切都是对象,p
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号