03.01 为什么Python效率这么低,还这么火?

strong-lee


结合我之前使用 Python 的经验,我认为 Python 火的原因两点:第一点是因为 Python的语法很简单,对于新手而言,其实上手难度不高,能够很快的掌握并写出代码。第二点是因为 Python 支持很多内置的算法库,数学库等,对于很多大学生而言,或者是大数据分析的同学来说,整体使用起来非常的方便,几行代码就可以解决你的需求。最终才会有这么多人来使用Python。

截止到 2019 年 12 月,PYPL (编程语言流行指数)发布的榜单,Python 以 29.71% 排在了第一,同时在 IOBE 发布 12 月的编程语言排行榜中,Python 以 10.308% 上升到第三,像以前第三名永远是 C++ 语言。通过编程语言的排行榜也反映出,在世界范围内,使用 Python 的同学越来越多。Python的确是一个上升发展的趋势。

我研究生期间,很多做机器学习算法的同学时在做算法实验时,其实都是使用 Python 来进行算法编码的。因为像现在很多的机器学习和大数据分析方面的算法库,在 Python 都有支持。比如线性回归、决策树、Numpy等等,只需要安装相关的算法包,同时把训练的数据集指定好,就能快速计算出机器学习模型的参数,这其实对于做算法的同学来说,极大的节约了其时间。

Python相对于其他语言来说,其语法非常简单,几行代码,就能够完成一个很复杂的功能。不像 Java 语言语法,你学习时候要学类、接口、虚拟机、线程等等知识点,学会之后才能进行编码。用户使用代码进行编程时,其实就想解决一个最简单的问题,如果语言的学习门槛过高的话,那其实对于用户来说,学习的时间成本就很大,用户往往不会选择这门语言。而 Python 正好由于其语言学习的简单性,大家才更加愿意接受它。

最后,开发同学不要过多的去依赖于 Python,Python 语言虽然简单好用,而且有很多开源的内置库支持,但其实现在很多互联网公司,使用 Python 语言开发线上业务系统的很少。Python 其实最大的用途还是能够帮我们去解决一些尝试性的实验工作,但要真正用于线上业务生产,还是不适合的。你可以学习完 Python之后,再去学 Java,语言的思想其实都是相通的,技多不压身。

我是Lake,专注大数据技术原理、人工智能、数据库技术、程序员经验分享,如果我的问答对你有帮助的话,希望你能点赞关注我,感谢。

我会持续大数据、数据库方面的内容,如果你有任何问题,也欢迎关注私信我,我会认真解答每一个问题。期待您的关注


Lake说科技


决定Python“火”的原因有很多,而你所谓的Python运行效率低,这个问题不重要!

Python为什么火,三分因天时,七分被炒作

Python诞生于1991年,属于90后,快到而立之年了。为啥突然就火了呢?因为大数据这个时代背景。


要玩大数据,统计知识第一,编程第二。也就是说,你数学很厉害,但是编程不厉害,这个时候你会怎么办?你希望要是有一种在科学计算方面很厉害,但很容易掌握的编程语言就好了。


而Python就具备这样的特点。Python语言简洁易读,从算术,到微积分,到线性代数,Python在科学计算方面相当给力。


因此,Python成了大数据的首选编程语言。


大数据是个好概念,Python容易学习,所以Python就成了培训机构可蹭的热点

要玩转大数据,只会Python远远不够,更别说学Python高薪就业了。但大数据自带流量,所以想炒作它的人比比皆是。


首先企业要炒大数据概念,哪怕卖煎饼,也要跟大数据扯上关系。似乎还真能扯上关系,煎饼的口味基于大数据。如果你仔细想,它不是那么回事,但绝大部分人没有这闲工夫去仔细思考的。


企业炒作大数据概念,那培训机构一定会跟上。因为想去参加培训的人会觉得,企业都在谈大数据,那学大数据好找工作呀。如果你仔细想,它也不是那么回事。


不管是不是那么回事,Python是被炒作起来了,它不想火都难。


Python运行效率怎么样?这需要综合评估。

评估一门语言,如果离开了目标和成本来判断好坏,那就是扯淡。比如去你家楼下买菜。走路去买,效率是最高的。但人走路的速度非常慢,比不上单车,更比不上代步车。所以,你不能说走路这么慢,为什么还有人走路。


人力的成本远比机器贵。一门语言学习陈本低,意味着企业对这么技能所花的钱,也相对较低。所以运行效率不重要。再说了,Python的运行效率低吗?


火的东西,可以蹭热点,但别把自己蹭进去了。



那我拍


看到很多人的回答颠倒因果,作为一个不精通二三十种语言的陈年码农,忍不住说几句。

说Python的Library多,生态圈大,这是结果,这是“火”的同义词。原因是什么呢?大约十年前,有些库Perl里有,Python里还没有呢。它为什么能超过Perl及其它一些脚本语言呢,根本原因还是在于其语言自身。

最重要的原因,它是最适合工程的脚本语言。一个语言,没必要牛逼到大多数人看不懂,这样做出来的项目易读性可维护性差。而Python,作为数学家发明的语言,天生就考虑其严谨。结果是优雅,易读,易维护,重用度高。

下面说“效率”。三个原因。

1.随着硬件的发展,运行效率越来越不重要。Python发明的前十几年为啥没火?这也是一个原因。

2. 开发效率更重要。这也是前面说的工程的问题。

3.分割的问题。需要效率的地方用C/C++嘛。世界总是需要胶水语言的,而且会越来越多,因为底层的算法的数量相对于上层的应用而言,应用更加多变。上层开发的人远多于底层开发的人。

归根结底一句话:适合于工程(开发效率高,维护成本低)。


萝卜头实验室


公司项目用的Python开发.Python开发效率确实高,代码简洁优雅,写起来很畅快!

但动态语言,运行效率确实低。

曾经用Python对两百万个元素二路归并排序,用了18秒。用golang就只用了0.5秒!效率差距确实大啊!

所以,对普通程序猿来说,Python适用于开发互联网小应用。一旦用户量起来了,或者强计算的应用,还是放弃Python吧。

Python之所以火,是因为Python的科学计算库,如numpy,pandas。这些库底层是用c实现的,所以效率很高,再加上Python语言的简洁优雅,所以用起来特别方便!

但请放心,普通开发人员根本不会用到这些库!除非你是搞数据清洗、分析的数据分析师

所以,搞Python的要么往数据分析发展,要么赶快拾起另外一门语言!否则......


云水君417


一波潮流而已。

python几乎是我接触过的第二烂的语言。最烂的是haskell。

强制缩进带来的后果,是复杂逻辑表达上,不易区分结构,容易出错而难以debug。已经尴尬的“pass”。

只能使用一句的lambda表达式,简直是被perl的代码块功能吊起来打。

没有任何看起来可以和perl的裸块功能相似的语法。

不是完全面向对象的语言,却在内部函数设计风格上,一会像C,一会像纯面相对象。

解释执行而不是编译执行,运行效率低下,而且,未被执行的分支,如果有错也无法知道。

类功能其实很弱,也没有诸如perl的moose那样强大的包来补偿。

调试的时候也没有一个如同perl的data dumper那样强大的工具。

python的流行就是一阵风潮而已。


cyler


效率的高与低,并不是简单的看跑分结果,更重要的是看解决问题的时间。每个语言在自己的领域都有独特的优势,在解决自己领域的问题时效率是最高的。因此,Python在下面几个领域的效率并不低:

1. 数据科学:基于pandas、numpy、sklearn、matplotlib等一系列现有库,python可以高效的完成业务部门需要的数据分析和展现工作

2. 大数据处理:现在已经是一个分布式处理为主的时代了,很多的测试还只是局限于单机系统。大数据处理框架Spark有python接口。这样主要运行由Spark分布式框架完成,加上python的简单语法,能够高效完成大数据的清洗转换等处理

3. 人工智能:现在许多优秀的深度学习神经网络都有python接口,例如tensorflow和pytorch等。这些框架可以基于GPU和TPU等硬件加速,python并不会是性能瓶颈。

因此,效率高与低都是相对的,需要分析选择合适场景的工具和框架。同时也要考虑其他因素,例如团队的学习成本。





云霄2019


这是一个引战的话题,不过我还是想说几句。

任何一个讨论语言效率问题的人,请先问下有没有搞清楚什么是效率?

软件工程发展至今,大型系统基本不可能通过一种语言去架构,c语言到是效率高来着?能去写一个web应用吗?如果硬要写当然可以,但是当你用c语言写完之后,估计这个项目都已经凉了。

python从来就不是为了所谓的运行效率而生的,运行效率在整个软件工程里并不占有多么大的比重,更多的还是在于处理业务逻辑上面。

从python的历史来讲,当初因为当初很多非计算机专业的科学家需要一门语法简洁,数据结构清晰的语言用于科学计算,数据分析等等,于是选择了python,并为此建立了大量的生态体系,由此火了一把。

再后来很多搞爬虫的因为语法简洁也选择了python,爬虫本身并不需要利用CPU运算,主要是IO相关的。

至于说用python在web应用或者说后端开发上,我觉得90%的功能都可以架构在这上面,有涉及到计算密集型的服重新用c写一遍,然后用python调用就完了。

很多人说小批量用户可以用python,用户量大了就不行了。

我想问问,用户量大,并发的瓶颈真的是语言本身吗?前端负载做好优化了吗?内部服务是不是都是异步的?数据库怎么优化的?

事实上用c语言或者go乃至rust之类的,都能写出所谓“性能”不错的代码,但是绝对不是在那些嘴上说着python效率低的程序员手上,因为他们的视觉还在某种语言本身,而不是在架构层面去考虑问题。


纸飞机编程


作为一个资深的程序员,我来谈一谈关于编程语言的发展吧,其实对于一门编程语言的评价不能仅仅只从性能,效率来看。一门编程语言的发展好坏是多方面的因素的,其实一门语言的火爆从侧面也反映了语言和这个时代发展的相适应性。


如果你看过保罗・格雷厄姆的那本经典之作《黑客与画家》,你就能从中了解和发现语言发展的趋势。


性能和效率或许不是最重要的

无论一百年后的计算机是什么样子,我们基本上可以断定它们的运行速度一定会快得多。如果摩尔定律依然成立,一百年后计算机的运行速度将是现在的 74 乘以 10 的 18 次方倍(准确地说是 73 786 976 294 838 206 464 倍)。真是让人难以想象。不过实际上更现实的预测并不是速度会提高这么多,而是摩尔定律最终将不成立。不管是什么东西,如果每 18 个月就增长一倍,那么最后很可能会达到极限。但那时的计算机比现在快得多大概是毫无疑问的。即使最后只是略微快了 100 万倍,也将实质性地改变编程的基本规则。如果其他条件不变,现在被认为运行速度慢的语言(即运行的效率不高)将来会有更大的发展空间。

……
既然在现实中一些应用程序本身的效率较低,而另一些应用程序会耗尽硬件提供的所有运算能力,那么有了更快速的计算机就意味着编程语言不得不应付更多的极端情况,涵盖更大范围的效率要求。我们已经看到这种情况发生了。要是以几十年前的标准衡量,有一些使用新语言开发的热门应用程序对硬件资源的浪费非常惊人。
不仅编程语言有这种现象,这实际上是一种普遍的历史趋势。随着技术的发展,每一代人都在做上一代人觉得很浪费的事情。30 年前的人要是看到我们今天如此随意地使用长途电话,一定会感到震惊。100 年前的人要是看到一个普通的包裹竟然也能享受一天内从波士顿发件、途经孟菲斯、抵达纽约的待遇,恐怕就要更震惊了。
我已经预测了,一旦未来硬件的性能大幅提高将会发生什么事。新增加的运算能力都会被糟蹋掉。

上面的引用部分,节选自《黑客与画家》这本书。

看到保罗・格雷厄姆说的,是不是有一点恍然大悟,或者是这么个道理的感觉?所以说:随着 CPU 等各种硬件性能的提升,语言之间带来的一些性能差,慢,都会被硬件提升所抵消,甚至在以后让你都感觉不到了,即使语言性能很差,但是硬件的提升,还会让你感觉有些硬件性能过剩,语言这么烂,都干不过硬件。


所以,未来语言发展的趋势肯定不是一味的追求性能和效率的语言,因为语言效率和性能可以被硬件的发展所抹平。


简单,易用的语言才是趋势

其实,对于一门编程语言来讲,它的流行和火爆从侧面就反映了一个现象,那就是简单易用,人们用起来简单,开发效率高就可以,我用着舒服,学起来简单,操作起来简单,这才是语言发展的趋势。那么 Python 火爆的原因是不是就找到了?


Python 的特点就是简单,易用,开发起来速度快,这是语言发展的时代要求。所以,Python 火了。

人工智能框架的带动

现在人工智能非常火爆,而很多人工智能的框架和接口都是 Python 的,例如 tensorflow 和 pytorch 等。随着人工智能的火爆,大家就开始炒作 Python 了,从而导致学习 Python 成为了一种流行的趋势。所以,Python 目前看来是大火了。


关注「非著名程序员」,每天分享有价值的科技内容,也欢迎大家在回答底下留言,一起交流分享,另外回答不易,请点赞支持。感谢!

非著名程序员


我觉得你的想法不对(虽然我是初学者),ps和word,Excel,等算得上大型软件工程吧,可是很多时候姑且70%人们只是需要这些软件几个功能而已,这就是py存在的道理,有一辆法拉利很炫,可是在大多数的道路上大多数时间里也绝对不允许你跑200迈以上,人能编的出来,时间不允许,时间允许,成本花费不允许,说到底看的是综合效率,要不图灵机早就是最完美的计算机了


别怕咱们就是刚


python编写比较简单,能减少程序员的时间,能直接调用别人的模块。速度快的应该是汇编语言,没人能看懂啊。现在cpu的运行速度都是上亿次每秒,软件运行速度快,没有什么用。c语言是不开放的语言,编程还要一句一句从底层编起。C语言只能算一种中级语言。程序员用C语言编程会累死的。C语言还不能跨平台。C语言会直接控制内存,有时会出现一些致命错误。所以java把c语言淘汰了。


分享到:


相關文章: