来源:Pexelspython
Python这两年很是火,随处可见的广告让它逐渐变成了一种老小皆知的存在。程序员
虽然问世几十年后,Python才获得编程社区的重视。编程
可是,其发展的势头彷佛无人能及。浏览器
自2010年年初以来,Python一直在蓬勃发展——在流行趋势方面,它最终超过了C、C#、Java和Javascript,成为计算机语言中的“大热门”。安全
它为人们提供了优质的服务——但这样的趋势会持续到何时呢?Python什么时候会被其余语言取代?为何会这样?服务器
关于Python的确切有效期众说纷纭,这些猜想可能会像科幻小说同样荒诞不经。与其猜想,不如评估一下当前促进Python流行的优点,以及将来会阻碍其流行的劣势。网络
Python的成功体如今Stack Overflow趋势上,该趋势测量了平台上帖子的标签数量。考虑到Stack Overflow的大小,这确实是衡量语言受欢迎程度的良好指标。框架
Stack Overflow上各类编程语言的标签快照机器学习
尽管R语言在过去几年一直处于平稳状态,并且不少其余语言也处于稳步降低趋势,但Python的增加却彷佛势不可挡。在全部的Stack Overflow问题中,几乎有14%被标记上了“python”,并且这种趋势愈来愈明显。如下是出现这种状况的几个缘由:编程语言
Python大约诞生于90年代。这不只意味着它有足够的时间成长,还得到了一个庞大的粉丝群体。
因此若是人们在用Python编码时遇到了问题,那么极可能只需用谷歌搜索一下便能解决。这不过是有些人已经遇到了相同的问题,写了一些有助于解决问题的内容而已。
Python已经存在了数十年,程序员们可利用这段时间写出优质的教程。除此以外,Python的语法也很容易理解。
首先,无需指定数据类型。指定变量便可;Python会根据语境判断它是整数、浮点值、布尔值仍是其余值。对于初学者来讲,这是一个很大的优点。若是是C++语言,那么用浮点值替换整数时,程序将不会进行编译,曾经使用该语言编程的初学者应该对这种状况带来的挫败感深有体会。
若是初学者曾经并行阅读过Python和C++代码,那么会明白Python是多么容易理解。
即便C++语言在设计时考虑到了英语,可是和Python代码相比,它仍是难以看懂。
Python已经存在了至关长的时间,开发人员们根据不一样目的制做出了不一样的程序包。如今,几乎全部的东西都能打包。
想处理数字、向量和矩阵?Numpy是个好帮手。
想对技术和工程进行计算?用Scipy。
想在数据处理和分析领域大展身手?试试Pandas。
想从人工智能入手?为何不用Scikit-Learn。
不管人们要管理什么样的计算任务,都有可能用到Python程序包。从机器学习在过去几年间的迅猛发展即可看出,自身用途的普遍让Python处于近期发展的前列。
来源:Pexels
根据先前的论述,能够想象Python会在很长一段时间以内保持发展的迅猛势头。但和其余技术同样,Python也有本身的弱点。笔者将一一介绍其最值得关注的缺点,并分析这些缺点是否致命。
Python的速度很慢。真的很慢。和其余语言相比,Python须要花2-10倍的时间来完成任务。
速度慢有多种缘由。其中一个缘由是Python属于动态类型——请记住,无需像其余语言同样指定数据类型。这意味着须要占用大量内存,由于程序须要为那些可在任何状况下运行的变量保留足够的空间。大量的内存占用转化为大量的计算时间。
另外一个缘由是Python一次只能执行一个任务。灵活的数据集会出现这样的结果——Python须要确保每一个变量只有一个数据类型,平行进程可能会形成混乱。
相比之下,普通的网络浏览器一次能够运行十二个不一样的线程。还有一些其余的理论。
但归根结底,全部的速度问题都可有可无。电脑和服务器的价格十分便宜,因此人们讨论的只是关于几分之一秒的运行速度。并且终端用户并不在乎本身是用0.001秒仍是0.01秒加载应用程序。
起初,Python使用动态做用域。这基本上意味着,为了评估表达式,编译系统首先要搜索当前块,而后依次搜索全部调用函数。
动态做用域方面的问题在于,每一个表达式都须要在每一个可能的语境中进行测试——这至关繁琐。这就是大多数现代编程语言都使用静态做用域的缘由。
Python曾试图过渡到静态做用域,但却形成了混乱。一般状况下,内部做用域——好比函数中的函数——将可以查看并更改外部做用域。但Python中的内部做用域只能查看外部做用域,却不能对其进行更改。这会致使严重的混乱。
尽管Python具备很高的灵活性,但Lambdas的使用仍是有必定的局限性。在Python中,Lambdas只能是表达式,而不能是语句。
另外一方面,变量声明和语句始终是语句。这意味着Lambdas不能为它们所用。
表达式和语句之间的区别至关随意,而其余语言并无这样的状况。
空格让代码更容易看懂,但也让其更难以维护。图源:Unsplash
Python使用空格和缩进来表示不一样级别的代码。这使得代码在视觉上更具备吸引力,可以直观理解。
其余语言,好比C++语言,更多使用的是大括号和分号。虽然在视觉上没有什么吸引力,对初学者也并不友好,但这样作让代码更易于维护。对于较大的项目来讲,这大有帮助。
Haskell这样较新的语言解决了这个问题:该语言多使用空格,但又为那些不想使用空格的人提供了另外一种语法。
人们见证了从台式机到智能手机的转变,很明显,人们须要强大的语言来构建移动软件。
但正在使用Python进行开发的移动应用软件并很少。这并不意味着用Python进行移动开发没法实现——名为Kivy的Python程序包就能够作到移动开发。
但Python并无考虑到移动设备。因此即便它有可能完成一些基本任务,也最好使用为移动应用程序开发而建立的语言。普遍使用的移动编程框架包括React Native、Flutter、Iconic和Cordova。
须要明确的是,在将来的不少年,笔记本和台式机应该都会继续存在。可是,移动设备在通讯量方面已远远超越了桌面设备,所以能够确定地说,想要成为经验丰富的全能型开发人员,只学习Python是不够的。
Python脚本并非遵循先编译后执行的流程。相反,它在每次执行时进行编译,因此任何编码错误在运行时都会显现出来。这会致使性能降低、浪费时间以及须要进行大量测试。真的是大量的测试。
对于初学者来讲,这是一件好事,由于他们能够从测试中学到不少。但对于经验丰富的开发人员来讲,对Python中的复杂程序进行调试会让他们感到无所适从。性能不佳是在Python上设置时戳的最大缘由。
来源:Pexels
· Rust具有与Python相同的安全性——不会意外覆盖任何变量。但它经过全部权和借用的概念解决了性能问题。Stack OverflowInsights显示,它仍是过去几年当中最受人们喜好的编程语言。
· Go很是适合初学者,就像Python同样。它是如此简单,甚至连维护代码都变得更加容易。有趣的一点是:Go开发人员是市场上收入最高的程序员之一。
· Julia是一种很是新的语言,可与Python展开正面竞争。它填补了大规模技术计算的空白:之前,人们一般会使用Python或Matlab,并使用C++库对整个程序进行修补,这一过程在大规模技术计算中是必需的。如今,人们可使用Julia,而没必要费力使用两种语言。
虽然市面上还有其余的语言,但Rust、Go和Julia倒是弥补了Python弱项的语言。全部这些语言都在还没有投入使用的技术中表现出色,在人工智能领域的表现尤为亮眼。Stack Overflow标签的数量显示,这些语言的市场份额仍然很小,尽管如此,它们将来的上升趋势却显而易见。
Stack Overflow上各类编程语言的标签快照
目前,Python十分流行,能够说是无处不在,新语言要想取代它,确定须要五年(甚至多是十年)的时间。
这个时候,很难说会是哪一种语言取代Python(Rust、Go、Julia仍是将来的某种新语言)。但考虑到Python体系结构中最基本的性能问题,必定会有某种语言取代它的位置。
你以为呢?
编译组:周果、李林虹 相关连接: https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66 如转载,请后台留言,遵照转载规范
ACL2018论文集50篇解读 EMNLP2017论文集28篇论文解读 2018年AI三大顶会中国学术成果全连接 ACL2017论文集:34篇解读干货全在这里 10篇AAAI2017经典论文回顾