[转载] python与c/c++相比有哪些优势

参考链接: Python输入和C++, Java速度对比

理论上,python的确比C/C++慢(我对Java的开发没有经验,无法评论)。这一点不用质疑。 C/C++是编绎语言,直接使用的是机器指令,而python总是跑在的虚拟机上, 把一个逻辑直接转换为机器指令,和把同样的逻辑转换为字节码,然后再转换为机器码来执行相比, 总是要高上一大截,这一点,有各种各样的性能报告,我没有必要,也没有必要去做出这样一个报告来, 我记得大概的数值是一到两个数量级,用C++的话来说,这就是所谓的抽象惩罚。 

但实践上,并非这么简单。 现实开发者领域,总是新手远多于高手,而从新手转为高手的时间相比,C/C++使用者花费的时间要比Python使用者多的多,保守的估计是5~10倍。 

这有两方面原因,一方面, C/C++(尤其是C++)的确是“博大精深”,而且总是有无穷无尽的细节,如果你是一个真正的开发者,你就会明白,实际上,就完全精通C/C++编绎器的选项,就足够学两门python了(一点都不夸张,我遇到很多做两三年的C++开发者,遇到一个编译或者链接问题都一筹莫展),而编绎器仅仅是C++开发过程中的最后一环而已,你可以不懂,但你总得要花时间去弄懂,因为,作为一个开发者,这是每天都要面对的问题,否则你给别人一个什么东西,像python一样,给个源文件?:)等你搞懂了指针,搞懂了数组,你还得搞懂指针与数组之间微妙的关系,等你搞懂了引用,你又不得不搞清引用与指针的区别,等你弄清了static 不同的用法,你又得明白vector> 与vector > 是不一样的,尽管只是小小一个空格,然后呢?学习STL(不要告诉我你在C++直接不用STL开发应用),实际上STL对于现实应用来说,太差强人意了,如要你常做字符处理,你就明白我说的是什么了,然后Boost?然后…,终于有一天,你可以开始真正做应用了,一年过去了?:) 另一方面,C++的开发经历绝对是充满荆棘和惊喜,以及沮丧,等你达到C/C++的自由王国,你一定是身经百战,但脑袋中还是有一个弦在紧绷,因为,一不留神,你就又得没日没夜的与奇妙的错误作战,这就是C++的开发感受。而且,C/C++的编码风格问题,一直是开发中充满争议的问题,我见过太多的关于风格问题的,毫无意义的争吵,但是很极少见到最终哪一种风格会令人每个人信服。 

申请阿里云服务时,可以使用2000元阿里云代金券,阿里云官网领取网址:https://dashi.aliyun.com/site/yun/youhui (长期有效) 

说说python吧,学习过程是这样的,数据类型是如此面向问题,没有了令人讨论的unsigned , short , long,这种这辈子我都不愿弄懂的修饰, 类型连同支持的操作是如此的易懂,一旦你明白了,从Sequence / Mapping纬上看问题,很容易区分list与dict,一旦你明白了Imutable与mutable的意义,你就很容易猜到,tuple与list ,set与frozenset, 的不同方法,一旦明白了list 的inplace-op与string的 non-inplace-op实现,就很容易猜到方法的使用方式,另一方面,符合现实问题的逻辑表达式,通用的len, 简洁的 a, b = b,a,让你觉得一切井然有序,而且简单明晰。强大而广泛且标准库,都把问题与实现的距离接近到了可以动手的距离。语法中相当部分约束,减少了不必要语言风格争论(私下认为,那怕是一个最难看的固定语法都比临时去决策如何去用来的好),这也加速了开发的步伐,况且还有一个风格标准建议在PEP中。阿里云服务器1核2G低至89元/年,阿里云官活动网址:https://dashi.aliyun.com/site/yun/aliyun 

现实中,我不相信一个三个月或六个月的应用项目,使用python会比使用C++/C开发出来的系统慢。因为,开发者总是人, 拥有同样开发年限的C++/C程序员与python程序员对语言精通的程序是截然不同的,特别情况下,python程序员是已经真正进入了经验积累期,而可能C++/C程序员才刚刚有了开发的感觉。如果可以做这样一个实验,真实的情况,可能是这样的,python开发者,早就完成系统测试,着手进行性能的优化,考虑使用C/C++替换部分性能的瓶颈,而C/C++程序可能为集成测试的不完整在正在惴惴不安,信号是,由于程序员的技能问题,项目可能要延期。 

附:python与c语言运行效率对比 

Python是个非常流行的解释型脚本语言。C是一个非常流行的编译语言。由于其编译的性质,导致C一般比Python要快,但是它是更底层的。相对的,Python编程更加快速和简单。译者注:在目前最权威的TIOBE编程语言排行榜上,Python和C语言分处榜上第6和第2的高位,在脚本语言和编译语言中分别坐着第二把交椅(第一把交椅分别是PHP和Java)。 

问题在于,Python程序(在没有输入的情况下)运行时所额外花费的时间相对C而言是否更加划算,以及运行时所用的时间是否比编程时间更加重要。 

系统程序 

我决定建立一个简单的程序,该程序可以处理以下公式的计算: 

{ x + y = 14 

{ x^2 + y^2 = 100 我很快用Python写了一遍,找到了答案。然后,我将其翻译成C语言。我知道,在C语言中的同一程序会花费比Python更多一些的代码,但是这并非是我所注意的问题。在继续之前,让我们看看代码: 

Python: 

x = 1 while x <= 14: y = 14 - x print str(x) + “|” + str(y) if x2 + y2 == 100: print “match” x = x + 1 

C: 

#include (<)stdio.h(>) int main() { int x, y, t; for (x = 1; x <= 14; x++) { y = 14 - x; printf("%d|%dn", x, y); if ((xx) + (yy) == 100) printf(“matchn”); } return 0; } 我总是听说C语言永远是最快的语言之一。在命令端口运行这两个程序,我并没看出这两个的运行速度有任何差别。所以我打开Ubuntu的命令端口,并输入如下代码: 

time ./a.out (time指令,紧跟着可以脱离time指令而单独运行的普通指令,运行指令并计时——很明显,这里的测试对象是C程序。)我得到0.001秒real time(真实用时),而user time(用户用时)和system time(系统用时)都是0。 

接下来是Python: time python system.py 结果有些吓人:0.017秒real time,0.012秒user time,0.004秒system time。 

当然了,real time的差别毕竟只有16毫秒,不过在长时间运行大量运算的大系统下这个差别就很明显了。 

百万程序 我决定将这个设想付诸现实。我写了另一个程序,这个程序将0到1000000之间的所有整数,包括0,依次print输出。当然这和我之前提到的大量运算的情况还是不同的,不过还是给了计算机比较多一些需要print的内容。 

Python: 

i = 0 while i (<) 1000000 print i i = i + 1 

C: 

#include (<)stdio.h(>) int main () { int i; for (i = 0; i <> printf ("%dn", i); return 0; } 

然后是测试结果: 

C: 

real 0m24.625s user 0m0.652s sys 0m2.240s 

Python: 

real 0m29.805s user 0m1.984s sys 0m1.812s 结论 

我承认,每个语言都有其优势和弱点。但从以上结果看来,我只会在像上面这些小程序这样快捷的编程中,或为C程序建立原型的时候才会用Python,而在运行花费时间更重要的任务中,我无疑会选择C语言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540613.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

清空日志的三种方法

方法一&#xff1a;echo "" >test.log方法二&#xff1a;> test.log方法三&#xff1a;cat /dev/null >test.log转载于:https://www.cnblogs.com/liang545621/p/7528509.html

splat net_Ruby中的Splat参数

splat netRuby Splat参数 (Ruby Splat Arguments) We have learnt how to work with methods in Ruby? We are very well aware of the fact that methods may or may not consume any arguments. Let us discuss the methods which consume argument or have a predefined ar…

ajax的访问 WebService 的方法

转自原文 ajax的访问 WebService 的方法 如果想用ajax进行访问 首先在web.config里进行设置 添加在 <webServices> <protocols> <add name "HttpPost" /> <add name "HttpGet" /> </protocols> </webServices> <s…

[转载] 使用DirectInput进行交互

参考链接&#xff1a; input()函数中的漏洞– Python2.x 使用DirectInput进行交互&#xff08;1&#xff09; DirectX 2008-08-10 15:11:34 阅读169 评论0 字号&#xff1a;大 中 小 订阅 输入设备简介 计算机通常使用三种输入设备&#xff1a;键盘、鼠标和游…

c语言 nan 常量_NaN32常量(Julia)

c语言 nan 常量Julia| NaN32常数 (Julia | NaN32 Constant) NaN32 is a constant of the Float32 type in Julia programming language, it represents "not-a-number" value. NaN32是Julia编程语言中Float32类型的常量&#xff0c;它表示“非数字”值。 Syntax: 句…

Hyperledger Fabric 1.0 从零开始(七)——启动Fabric多节点集群

5&#xff1a;启动Fabric多节点集群 5.1、启动orderer节点服务 上述操作完成后&#xff0c;此时各节点的compose配置文件及证书验证目录都已经准备完成&#xff0c;可以开始尝试启动多机Fabric集群。 首先启动orderer节点&#xff0c;切换至orderer.example.com服务器&#xff…

[转载] python中print()函数的用法和end=““不换行详解

参考链接&#xff1a; Python | print()中的结束参数 需求&#xff1a;打印五个字符&#xff0c;在一行上 代码&#xff1a; i 0 while i< 5 : i 1 print(i,end’’) 结果&#xff1a; 1 2 3 4 5那么问题来了&#xff0c;为什么加一个end"" 就不换…

css中图片左右边距_CSS中的边距

css中图片左右边距CSS保证金属性 (CSS margin property) CSS Margins are used to space around any element, for this we use "margin" property in the CSS. CSS边距用于在任何元素之间留出空间&#xff0c;为此&#xff0c;我们在CSS中使用“ margin”属性 。 S…

js 实现网页显示倒计时

用 js 来实现网页显示倒计时效果 1 function checkTime( time ){2 var data new Data(); // 获取现在时间3 var nowData data.getTime(); // 转化成毫秒数4 var time ; // 结束的时间5 var t time - nowData ;6 var HH, mm , ss 0;7 var sta "…

scala方法中的变量_Scala中的变量

scala方法中的变量Scala变量 (Scala variables) A variable is named a reference to a memory location. The location stores the data that is used by the program. 变量被称为对存储位置的引用。 该位置存储程序使用的数据。 Based on the data type of the variable the…

[转载] python[1]-print中的sep、end参数

参考链接&#xff1a; Python | print()中的sep参数 读示例程序代码时遇到的问题&#xff0c;看不懂end和sep参数。经过查找&#xff0c;基本弄清楚了。 sep&#xff1a;可以设置print中分割不同值的形式。应该是separation的缩写。 end&#xff1a;可以设置print打印结束时最…

分区 主分区 和 扩展分区_等和分区

分区 主分区 和 扩展分区Description: 描述&#xff1a; This is a popular interview coding problem which has been featured in interview rounds of Amazon, Oyo rooms, Adobe. 这是一个受欢迎的采访编码问题&#xff0c;已在亚马逊&#xff0c;Oyo房间&#xff0c;Adobe…

ORACLE 物理读 逻辑读 一致性读 当前模式读总结浅析

在ORACLE数据库中有物理读&#xff08;Physical Reads&#xff09;、逻辑读&#xff08;Logical Reads&#xff09;、一致性读&#xff08;Consistant Get&#xff09;、当前模式读&#xff08;DB Block Gets&#xff09;等诸多概念&#xff0c;如果不理解或混淆这些概念的话&a…

[转载] Java Formatter toString()方法与示例

参考链接&#xff1a; Python | 输出格式化 output format 格式化程序类toString()方法 (Formatter Class toString() method) toString() method is available in java.util package. toString()方法在java.util包中可用。 toString() method is for the string representat…

arm tbh_TBH的完整形式是什么?

arm tbhTBH&#xff1a;说实话 (TBH: To Be Honest) TBH is an abbreviation of "To Be Honest". It is internet slang which generally used as an acronym or hashtag over the internet on social media networking sites like Facebook, Instagram, Twitter, Yo…

异常:fatal: unable to access 'https://git.oschina.net/pcmpcs/library.git/': Could not resolve host...

git fork项目时出现的异常. 原因: 我以前用的是ssh地址做的远程通信地址&#xff0c;而这次是用的是https&#xff0c;因为很久没用&#xff0c;所以忘记了以前是用ssh的了。解决方案一&#xff1a;复制ssh协议的地址&#xff0c;然后再关联远程仓库。并且在VCS下的git下的Rem…

计数器数组_子数组计数

计数器数组Problem statement: 问题陈述&#xff1a; Given an array of N positive integers a1, a2, ..., an. The value of each contiguous subarray of a given array is the maximum element present in that subarray. The task is to return the number of subarrays…

[转载] 列表、元组及通用序列操作

参考链接&#xff1a; Python | 重点数据类型 (字符串&#xff0c;列表&#xff0c;元组&#xff0c;迭代)(String, List, Tuple, Iteration) 序列是Python中最基本的数据结构&#xff08;一些基本特性类似于C中的数组模板类&#xff09;&#xff0c;序列中的每一个元素都有相…

onActivityResult()后onresume()

当你调用完一个存在的activity之后&#xff0c;onActivityResult将会返回以下数据&#xff1a;你调用时发出的requestCode、被调用activity的结果标志resultCode&#xff08;如RESULT_OK&#xff09;和其他的额外数据。我们期望的都是得到RESULT_OK&#xff0c;表示调用成功&am…

java反射用法示例_Java包| 类型,用法,示例

java反射用法示例配套 (Packages) Packages in Java is simply a mechanism to encapsulate (i.e. to put in a short and concise form) a group of classes,interfaces,enumerations, sub packages, etc. In real world, application is developed in such a manner so that …