如下是译文:python
Python通过了几十年的努力才获得了编程社区的赏识。自2010年以来,Python获得了蓬勃发展,并最终超越了C、C#、Java和JavaScript。程序员
可是,这种趋势将持续到何时?什么时候Python会被其余语言取代?被取代的缘由又是什么呢?编程
对于Python被淘汰出局的确切日期有不少猜想,它可能会像科幻小说同样成为过去。在本文中,我将讨论促成Python大面积普及的优点,以及未来致使它陨落的弱点。浏览器
促成Python流行的因素安全
经过Stack Overflow发展趋势就能够洞悉Python的成功。考虑到StackOverflow的规模,咱们能够认为这是衡量编程语言流行度的一个很好的指标。服务器
尽管在过去几年中,R语言的发展一直处于平稳状态,不少其余编程语言已开始稳步降低,但Python的增加彷佛势不可挡。在全部StackOverflow的问题中,带有“python”标签的占到了14%,并且这种趋势还在上升。其中的缘由有不少。app
Python是一种古老的语言机器学习
Python于90年代问世。这不只意味着Python有足够的时间成长,并且还拥有了一个庞大的支持社区。编程语言
所以,若是你在使用Python进行编程时遇到任何问题,只需上网搜索就能够获得答案。由于老是会有人在这以前就遇到了这个问题,并为此撰写了一些有用的资料。ide
对初学者很友好
Python对初学者友好的缘由不只仅是由于它已经存在了数十年,予以程序员足够的时间编写出色的教程,并且还由于Python的语法很是易于理解。
首先,无需指定数据类型。你只需声明一个变量便可,Python会根据上下文判断这个变量是整数、浮点数、布尔值仍是其余类型。对于初学者来讲,这是一个巨大的优点。若是你有过使用C++编程的经历,那么就会懂得只由于你错把浮点数定义成了整数,就致使程序没法经过编译有多么难受了。
此外,比较Python和C++代码,不难发现Python有多么易于理解。尽管C++在设计时考虑到了英语,但与Python代码相比,阅读C++的代码仍是至关坎坷。
用途普遍
因为Python已经存在了很长时间,所以开发人员为之开发出了各色的软件包。现在,不管遇到什么问题,你均可以找到相关的软件包。
想处理数字、向量和矩阵?那么就来试试 NumPy 吧。
想进行技术和工程的计算?那么就来试试 SciPy 吧。
想操做和分析大数据?那么就来试试 Pandas 吧。
想学习人工智能?为何不试试 Scikit-Learn 呢。
不管你须要进行哪方面的计算任务,均可以找到相关的Python软件包。因为过去几年中机器学习的迅猛发展,Python已经站在了时代发展的最前沿。
Python的缺点,这些缺点是否致命?
经过上述讨论,你能够想象在很长一段时间内Python的发展都势不可挡。然而,Python也逃不开一切技术的命运,它也有本身的弱点。接下来,我将逐个介绍Python的重大缺陷,并评估这些缺陷是否致命。
速度
Python很慢,很是很是慢。平均而言,使用Python完成某个任务所需的时间是使用任何其余语言的2–10倍。
其中的缘由有不少。其中之一是由于Python是动态类型的,别忘了你不须要像其余语言同样指定数据类型。这意味着内存的耗费很是大,由于在任何状况下程序都须要为每一个变量保留足够的空间。而巨大的内存使用量必然须要耗费大量的计算时间。
另外一个缘由是Python一次只能执行一个任务。这是灵活的数据类型带来的结果,Python须要确保每一个变量只有一个数据类型,而并行进程可能会在这一点上出问题。
相比之下,普通的Web浏览器一次能够运行十几个不一样的线程。固然其中还涉及别的因素。
但最终全部的速度问题都不打紧。由于电脑和服务器的价格愈来愈低,咱们谈论的也只不过是几分之一秒的问题。最终用户并不真正在意他们的应用加载须要0.001仍是0.01秒。
范围
最初,Python是动态做用域。这基本上意味着,为了评估表达式,编译器首先须要搜索当前块,而后依次搜索全部调用函数。
动态做用域的问题在于,每一个表达式都须要在全部上下文中进行测试,这很繁琐。这就是为何大多数现代编程语言都使用静态做用域。
Python曾尝试过渡到静态做用域,但搞砸了。一般,内部做用域(例如函数中的函数)可以查看和更改外部做用域。在Python中,内部做用域只能看到外部做用域,但不能更改。所以引起了不少混乱。
Lambdas
尽管Python很是灵活,但Lambdas的使用仍是有必定的局限性。Lambda只能是Python中的表达式,而不能是语句。
另外一方面,变量声明和语句始终是语句,这意味着它们不能使用Lambda。
在Python中,表达式和语句之间的区别至关随意,这是其余编程语言都没有的问题。
空白
在Python中,你须要使用空白和缩进来表示不一样级别的代码。这种格式具备视觉吸引力,并且易于理解。
其余编程语言(例如C++)都须要依赖大括号和分号。尽管这可能在视觉上没有那么强的吸引力,并且对初学者不够友好,但能够提升代码的可维护性。在大型项目中,这种方式更为稳当。
Haskell等新兴的编程语言解决了这个问题:它们依赖空白,但同时也为那些但愿不用空白的人提供了另外一种语法。
移动开发
咱们目击了从台式机向智能手机的转变,很明显,咱们须要强大的语言来构建移动软件。
然而,使用Python开发的移动应用并很少。这并不意味着Python没法开发移动应用,你能够试试看一个名为 Kivy 的 Python 包。
可是,Python的设计被没有考虑到移动设备。所以,即便Python能够应付基本的任务,但咱们最好仍是选择专门为移动应用程序开发而建立的语言。普遍用于移动编程的语言包括:React Native、Flutter、Iconic和Cordova。
咱们须要明确的是,笔记本电脑和台式计算机已经存在不少年了。然而,因为移动设备的使用已然超越了桌面设备,所以咱们确定地说,学习Python不足以成为经验丰富的全方面开发人员。
运行时错误
Python不须要首先编译,而后再执行。相反,它会在每次执行时编译,所以全部编程上的错误都会在运行时显示出来。这会致使性能降低、浪费时间,并且还须要进行大量测试。
对于初学者来讲,这未必是坏事,由于测试能够教会他们不少知识。然而,对于经验丰富的开发人员而言,必须使用Python调试复杂的程序很使人头疼。性能欠缺是Python最大的问题。
Python何时会被取代?
现在,编程语言市场上涌现了新的竞争力量:
Rust提供了与Python相同的安全性——不会意外覆盖任何变量。可是,它经过全部权和借用的概念解决了效率的问题。根据StackOverflow Insights,Rust是近几年最受欢迎的编程语言。
Go 与 Python 同样很是适合初学者。语言自己很是简单,维护代码更加简单。此外,有趣的是,Go开发人员是市场上收入最高的程序员之一。
Julia是一种很是新的语言,可与Python正面竞争。Julia填补了大规模技术计算的空白:之前,人们一般都须要使用Python或Matlab编写代码,而后再使用C++库修补整个程序,由于C++库是大规模必不可少的。现在,人们可使用Julia,而没必要在两种语言之间挣扎。
尽管市场上还有其余语言,但Rust、Go和Julia 能够弥补Python的弱点。全部这些语言在即将到来的技术中都有出色的表现,最典型的就是人工智能。尽管它们的市场份额仍较小,但根据StackOverflow的数据显示,这些语言的发展呈现出明显的上升趋势。
现在,Python无处不在,咱们还须要五年甚至更长的时间,才有可能看到Python被新语言所替代。
就目前而言,咱们很难判断哪一种语言有可能替代Python,是Rust、Go、Julia抑或是其余的新语言。但鉴于Python体系结构中最基本的性能问题,其终将难逃被人替代的命运。