势头强劲的 Python PK 强大的 C++,究竟谁更胜一筹?
一直以来,在 TIOBE 编程语言排行榜中,简单易用的新贵 Python 和老将 C++ 是强劲的竞争对手,不过 C++ 和 Python 都是非常流行的编程语言,对于开发者而言,在e ( S ( X选择语言利器时究竟有何参考标准?本文将基于两种语言的关键性能对比,带领大& 3 k 0 p家深入不一样的 Python 与 C++。
作者 | Farhad Malik
译者 | 弯月,责编 | 屠敏
以下为译文:
在编X 8 : 9 C #程生涯的早期阶段,我参与过一款C++数学优化应用程序的开发,这个程序对性能的要求很高。至c : r今我依然记得那段艰难的经历。
在那个项目中,我遇到了一些概念,比如指z W ] z . o 6 n N针、并发和垃圾回收,刚开始的时候这些概念非常难以理解。) m O
然而,如果你问我对C++的看法,那么我会很高兴地向想要构建实时应用程序的人推荐C++。
C++是一门非常强大的编程语言。
最近,我一直在从事有关机器学习和数据科学解决方案的架构和实现工作。我选择的语言是Python。我承认也很欣赏这种语言的简单性和强大性。有些程序员认为PythoY ( F 7n是一种原型编程R 9 k a _ P语言,^ 8 V } q 9 = j当然他们有自己的正当理由。但是,我会毫不犹豫地向想要构建数据分析应K d V u - y q用程序的人推荐Python。
Python是对开发人员非常友好的编程语w K ^言。
本文的目的
C++和Pt 0 + &ython都是非常流行的编程Q k X 1 $语言。本文将重点介绍两种语言之间的相似点和差异性,以便我们理解何时使用哪种语言。
这两种语言有很多差异和相似之处,但本文只介绍我们必须了解的关键性功能。
首先,两种编程语言有很多相似之处,所以学习起来也不难。
Python是r H n $解释型语言,而C++不是
C++的工作方式是,首S m ! [先将写好的代码保存到扩展名为.cpp的文件中。
然后编译.cpp文件。编译器将C++代码转换为原生代码。然后执行这些机器代码。% y @ K K i因此,C++} 3 m非常靠近硬件。
所以,C++的速度非常快,非常适合实时应用程序。关键在于C++应用是“原生”应用,这表明编译器是依赖操作系统和处理器的组件。
编译器依赖机器,因此C++也依赖机o q X Y h m I T 1器。
但是,这t + . 9 [意味着代码只能在与编译代码的编译器相兼容的操作系统(和处理器)上运行。x d p $ $thon的工作方式是,首先在安装Python软件包的位置创建一个虚拟机。
然后将写好的pytho~ * p en代码保存到.py% K v L v y L J文件中。
然后再通过CPython,将Python代码编译为Python虚拟机的字节码。
那么,这个P@ . 1 ! = - z GythoI A y E r (n虚拟机就像C++一样是依赖于机器的,但 $ + 9 o O L % T是Python代码却不是。
当你想执行字节码时,这些代码就会在运行时被解/ H w ~ } A Z释。因此Python不依赖于机器。
Python字节码依赖 r %于Python虚拟机,而Python不依赖于机器。
需要注意的一点是,我们可以在一个操作系统中编写Pt } 4 t @ ` E j *ython代码,然后将其复制到另一个操作系统V r l h中,就可以运行。但C++不行。我们必须在每个OS上编译C++代码。正是这个原因,与Python相比,C++的运行速度非常快。
由于Python是一种解释型语言,因此它的运行速度比C++慢。
编程约定
首先,我们来看一看易用C @ d B 0 N N a性。
Python是一种高[ _ 8级语言,而C++是一种低级语言。Python具有可读性、简单、直截了当,而且{ S K r k { | / ?学习起来很简单。
这是一大优势,因为这意味着采用Pyth, p f ,on的开发人员越来越多。^ t # R u M e而且这个特性还可g 5 ^ | B L c以迅速地将$ : B { ; M 4 z hPython应用程序推向市场。
由于易用性和大量的库,Python成为了数据科学和V w e # m d { @ E机器学习项目的首选编程语言,而且在Web开发中也越来越受欢迎。
Python非常适合于测试新概念X x w ( 6 * ? r和想法。
然而,有时也因为这个原因导致程序员将Python视为一种原型语言。但话又说回来,这种7 b Y观点的 a ` I L C ^种功能强大的语言,因@ j l此很A p { F复杂,因为它可以执行很多低级任务。
开发人员需要遵守C++中大量的约c | S V O定和规则。
C++广泛用于游戏开发、后端服务器| w L p u应用程序以及分布式交易应用程序,这些系统都要求快速执行任务。此V 2 @ { T 1外,C++具有极强的可移植性。
下面,我们来谈谈语法。
1. Python编程c W * X { X { T十分依赖于空白和制表符(缩进)。一切都是对象。所有类的属性和方法都是公有的。在C++中我们可以利9 5 M + b Z用访问修饰符隐藏类的属性/方法,Pyy $ 6 V 2 * qthon却做不到。
我感觉刚开始的时候很难适应Python的缩进和格式。
2. 我想,大多数开发V Z k & p i L u人员都知道Python中没有分号或大括号。你可以编写整洁的列表推导。Pythoni H g z中的布尔表达式也没有括号。另一方面c h !,C++非常依赖于括号和分T d S号。适应C++的语法需要一定的时间。
3. C++是一种强类型语言,每个变量的类型需要预先声明。而Python是动态类型m O T,我们不需要指出对n Z ` b & t 0象的类型。这种动态特性常常会让我们遇到意想不到v Z / J C r 3 v的结果。Python程序员需要保证以正确的方式或在正确的上下文中使用对象,因此既有积极的一面,也有消极的一面。
在执行Python代码时,我们会遇到运行时错误。如果在生产运行时中遇到类型错误,就很尴尬了!
值得一提的是,为了实现可以在运行之前就发现问题的Py v v e G Tython解决方案,许多开发人员花费了大量时间和精力- n _ Z l $ r。
内 m b ? 9存管理和并发
在介绍管理内存的方式之前,首先我们应该注意,这两种编程语言都支持面向对象的编程和继承。
当程序员在程序中创建对象时,这些对象会占用内存。当不使用对象时,程序将通过垃圾= ? 1 M 8 S 5 ! x回收清除掉这个垃圾。
垃圾回收的方式工作是不确定的。
作为Python程序员,我们无需; V ~ ` u A g $担心如何以及何E J x F L u时地清除内存。Python会通过智能垃圾回收自动为我们处理内存。C++中没有这样的垃圾回收,你N ; 7 v L o ~ j I必须自己动手管理内存。
C++中的内存管理需要手动完成。
理由很充分。C++的设H K 0 .计主旨就是打造一种高性能的编程语言。负责管理内存并从内存中删除不使用对象的垃圾回收会影响应用程序的性能。
最d B t K 2 z重要的是,垃圾回收在本质上是不确定的。你无法保证对象删除后是p 4 Z # o E 0 m否仍在内存中。
Python是一种对开发人员非常友好的编程语言,因为我们不必担心忘记释放内存。@ y , 5 9 a `
并发
对于受I/O或CPU约束的应用程序,程序员常常喜欢在代B A ? N码中创建多个线程,并通过同时运行这些线程加快计算的速度。
不管我们的计算机中有多少个核心,Python只允许我们一次执行一个线程。这是Python的全局解释器造成的限制。这会给需要多个CPU的应用程序造成问题。
但是,我们可以在Python中创建多个} C B k进程。
另一方面,C++允许我们实现多线程应用程序。
C++有指针,但Python没有
谈论C++,怎么能不提指针?
Python中没有指针,至少没有开箱即用的指针。但是,C++中有指针。
首先,让我们来解释一下指针是什么。
假设有一个变量。这个变量是一个整数,值设置为5。那么,变量与它的值是一个意思,比如x = 57 t q G i,x是变量的名称,值为5。
在C++中,变量是通过值传递给函数的。
那么问题在于( @ L ] e u,这些值保存在哪里?
变量的每个值都保存在计算机的内存地址中。你可以使用C+$ @ R P } o+的运算符&访问变量的内存地址。指针是一个变量,指向了值所在的内存地址。
指针能够提高程序的效率。
在标识e 5 ! ;符之前使用运算符*,就可以声明一个指针。如下所示:
int* y = &` m M ] u f hamp;x
上述,我们创建了一个指针变量y,这个变量n [ 3 v (保存了变量x的内存地址。
假设你有一个函数接受变量作为输入(参数)。这个值X y H P K { D d的变更意味着在函数内部创建一个新变量。请. R A Q q Q _ q记住,这在C++中会占用大量的内存,变量是通过值传递给函数的。
具r P } n U ?体来说,首先我们创建一个将传入变量加100的函数。
void add_hundred(int x) {
x += 100;
}这段代码接受一个变量x,然后将x加100。
在函数内部,任何有关这个值的修改都会针对一个新变量,而不是原来的变量。
调用上述代码的主函数如下:
int main(void) {
int x = 2337;
add_hundred(x);
return 0;
}即使在执行完函数之后,在函数外部,x的值仍然是2D H C k N a } $337。
那么,为什么我们需要指针?
为了理解这一点,% , 9 C { g 8 _ B l ^白值和引i ~ 4 # :用类型之间的区别7 Z + 2 ? 2 e ;。值类型就好像每次都从物理上复制变量并赋4 B i v M 给? Q ,它一个新变量。值类型占用的空间更多,而且每个变量都有自己的内存地址。
我们可以修改上述函数,让它p T O接受指针作为参数。这样的修改可以减少程序占用的内存量。而2 9 V P ~ &且还不会创建不必要的重复变量。
如下函数可以直接修改变量的值。
void add_hundred(int *x) {
*x += 100;
}int main(void) {
int x = 2337;
int *y = &x add_hundred(y);
return 0;
}下面,我们创建了一个指针y,并传递给一个函数,而这个函数会将输入( 7 参数x加100,即使位于函数外部的x值也会发生变化。也就是说,在函数执行] 6 M M .完成后,? w Z r t Q 0 px的值为24g F N Y ( ! Y q37。
我对指针的看法
使用指针的原因之一在于,你可以在调用的函数中修改变量或对象。但是,我建议尽量避免使用指针。
在C++中,使用引用比使用指针更好,因为你可以轻松地修改调用的函数,而不会改变调用所表示的语义。
指针是一个复杂的主题,程序员会经常因为使用指针而造成内存管理错误。Pyl $ K 3 Z & !thon是适合初学者的编程语言,因此Python中没有这种复杂的类型。
最终的建议
我有什么建议?Python还是C++?
这取决于你需要Z z Z实现的解决方案。你是否需要跨平台、高性能、机器学习的解决方案?
如果条件允许的话,你可以同时使用两者。
我强烈建议两者你都应该学习和使用,因为这可以拓宽你对编程语言的理解。@ , M q 2 q
如果你熟悉C++,那么毫不费力就可以用PytD 9 H R ;hon编y W } r x V写程序。
如果你熟悉Python,那么应该对大多数的编程概念都有很好的了解,C++可以帮助你进一步理解内存管理、并发和指针等,因此二者都应该学习。
另外,你还可以Y p Q _ R M D S ~将Python和C++集成到一起,实现高级的实时分析解决方案。
总结
C++和Python都是非常流行的语言,我非常推荐所有人都来学习这两种语言。
在本文中,我c 7 z们重点介绍了这两种语言之间的相似点和差异性,以K p , y g A 0 y S便我们理解何时使用哪种语言。
原文:https://meM } 1 Zdium.com/fintechexplained/from-python-to-c-a-thorough-comparison-9244b32d, ; h i X J63f4
本文为 CSDN 翻译,转载请注明来源出处。