为什么Python不是面向未来的编程语言?

{"type":"doc","content":[{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"缓慢的速度、运行时问题和移动应用开发困境“毁掉”了Python的未来"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"编程社区花了几十年的时间才接纳了Python。但自2010年初以来它一直在蓬勃发展,热度终于比肩C、C#、Java和JavaScript。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但这种趋势会持续到什么时候?什么时候Python会被其他语言取代,为什么?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python的消亡时间是很难预测的,所以我不会给出确切的时间点,而是会评估当下正在推动Python普及的优势有哪些,将来导致它没落的缺陷又会是哪些。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"哪些优势造就了Python今天的流行局面"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python的成功从Stack Overflow"},{"type":"link","attrs":{"href":"https:\/\/insights.stackoverflow.com\/trends?tags=r%2Cpython%2Cjavascript%2Cjava%2Cc%2B%2B%2Cc%23","title":"","type":null},"content":[{"type":"text","text":"趋势"}]},{"type":"text","text":"中就能管中窥豹。这个趋势数据统计了平台上帖子中的标签数量。鉴于Stack Overflow的巨大规模,这是编程语言流行度的一个很好的指标。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"StackOverflow上各种编程语言的标签数量快照。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"R在过去几年一直处于稳定状态,其他很多语言的热度则在稳步下滑,但Python的增长似乎势不可挡。约14%的Stack Overflow问题都被标记为“python”,而且这个趋势还在上升。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这种现象的背后有几个因素。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"Python历史悠久"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python从90年代就出现了。这不仅意味着它有足够的时间来成长,还让它获得了一个庞大的支持社区。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,如果你在使用Python编程时遇到任何问题,都有很大机率通过一次谷歌搜索来解决它。因为很可能有人遇到过你的问题,并为此写了一些有用的方案。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"它对初学者友好"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这不仅是因为它已经存在了几十年,让程序员有时间制作精彩的教程。更重要的是Python的语法非常易读。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"首先,它不需要指定数据类型。你只需声明一个变量;Python会从上下文中理解它是整数、浮点值、布尔值还是其他值。这对初学者来说是一个巨大的优势。如果你用C++编过程,你就会知道仅仅因为一个浮点数换成一个整数就让程序无法编译是多么令人沮丧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如果你对比过Python和C++代码,就会知道Python是多么容易理解。尽管C++在设计时就考虑到了可读性,但与Python代码相比,它读起来还是相当费劲的。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"它的用途广泛"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"由于Python已经存在了很长时间,开发人员已经为众多用途都制作了对应的包。如今,你可以找到几乎适用于所有事物的包。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想要处理数字、向量和矩阵?NumPy是你的好帮手。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想为技术和工程行业做计算吗?请用SciPy。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想在数据操作和分析方面大展宏图吗?试试Pandas吧。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"想入门人工智能吗?为什么不用Scikit-Learn呢。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"无论你尝试管理哪种计算任务,都可能有一个Python包可用。这让Python始终处于技术的最前沿阵地,从过去几年机器学习领域Python使用率的激增就可见一斑。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Python的缺陷,它们是否会动摇根本?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如前文所述,你可以想象Python将在未来很长一段时间内保持很高的热度。但与所有技术一样,Python也有其弱点。我会一一分析其中那些最重要的缺陷,并评估这些缺陷是否致命。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"速度"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python很慢,真的非常慢。平均而言,使用Python完成一项任务所需的时间是使用其他任何语言的2到10倍。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这种情况是多种原因造成的。其中之一是Python是动态类型的 — 请记住,你不需要像在其他语言中那样指定数据类型。这意味着它需要使用大量内存,因为程序需要为它可能用到的每个变量保留足够的空间。大量的内存使用就意味着大量的计算时间。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一个原因是Python一次只能执行一个任务。这是灵活数据类型的后果——Python需要确保每个变量只有一种数据类型,而并行进程可能会在这里出问题。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"相比之下,你的常用Web浏览器可以同时运行十几个不同的线程。此外还有其他一些因素。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但归根结底,这些速度问题都不是很关键。计算机和服务器变得如此便宜,所以速度再慢也只是亚秒级的差距。最终用户并不那么关心他们的应用程序是在0.001秒还是0.01秒内加载。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"作用域"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一开始,Python是动态作用域的。这基本上意味着,要评估一个表达式时,编译器首先搜索当前块,然后依次搜索所有调用函数。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"动态作用域的问题在于每个表达式都需要在每个可能的上下文中测试 — 这很乏味。这就是大多数现代编程语言都使用静态作用域的原因。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python尝试过渡到静态作用域,但搞砸了。一般来说,内部作用域 — 例如函数内的函数 — 能够看到和改变外部作用域。在Python中,内部作用域只能看到外部作用域,而不能改变它们。这会导致很多混乱。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"Lambda"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"尽管Python相当灵活,但Lambda的用法却相当有限。Lambda只能是Python中的表达式,不能是语句。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另一方面,变量声明和语句始终是语句。这意味着Lambda不能用于它们。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"表达式和语句之间的这种区别相当随意,在其他语言中不会出现。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"空格让代码更具可读性,但更难维护。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"空格"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Python中,你可以使用空格和缩进来表示不同级别的代码。这让代码看起来更美观且易于理解。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"其他语言(例如C++)更多依赖大括号和分号。虽然这可能不够美观,对初学者不够友好,但它让代码更易维护。对于更大的项目来说这种方法更好。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Haskell等较新的语言解决了这个问题:它们依赖空格,但为那些希望不使用空格的人提供了另一种语法。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"移动开发"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"当我们见证软件产业的主流从桌面转向智能手机时,很明显我们需要强大的语言来构建移动软件。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但使用Python开发的移动应用并不多。这并不意味着它做不到 — 有一个名为Kivy的Python包就是做这个的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可是Python并不是为移动而设计的。因此,即使开发人员可能用它为基本任务做出可接受的结果,但最好的办法还是使用一种为移动应用开发而创建的语言。一些广泛使用的移动编程框架有ReactNative、Flutter、Iconic和Cordova。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"需要明确的是,笔记本电脑和台式电脑应该会继续存在很多年。但由于移动端的流量早已超过桌面端,可以肯定地说,只学习Python并不足以成为一个经验丰富的全能开发者。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"运行时错误"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python脚本不是先编译然后执行。相反,它每次执行时都会编译,因此任何代码错误都会在运行时显现出来。这会导致性能下降、耗费更多时间且需要进行大量测试。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"这对初学者来说非常有用,因为测试可以教会他们很多东西。但是对于经验丰富的开发人员来说,用Python调试一个复杂的程序会让他们出岔子。这种缺陷是在Python上设置时间戳的最大因素。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"哪种语言可以在未来取代Python?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Python在编程语言市场上有一些新生的竞争对手:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Rust提供了与Python相同的安全性—任何变量都不会被意外覆盖。但它通过所有权和借用的概念解决了性能问题。根据StackOverflowInsights的"},{"type":"link","attrs":{"href":"https:\/\/insights.stackoverflow.com\/survey\/2019#technology","title":"","type":null},"content":[{"type":"text","text":"说法"}]},{"type":"text","text":",它也是过去几年最受欢迎的编程语言之一。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Go非常适合喜欢Python的初学者。而且它非常简单,代码维护起来更容易。有趣的一点:Go开发人员是市场上"},{"type":"link","attrs":{"href":"https:\/\/insights.dice.com\/2019\/10\/30\/top-programming-languages-that-will-get-you-paid\/","title":"","type":null},"content":[{"type":"text","text":"收入最高"}]},{"type":"text","text":"的程序员之一。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Julia是一种非常新的语言,可以与Python正面竞争。它填补了大规模技术计算的空白:通常,人们会使用Python或Matlab,并用大规模计算必需的C++库修补整个过程流程。现在,人们可以使用Julia,然后就用不着同时使用两种语言了。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"虽然市场上还有其他语言选项,但Rust、Go和Julia成功弥补了Python的缺陷。所有这些语言都在新兴的技术领域有着出色表现,尤其是在人工智能方面。虽然它们的市场份额仍然很小(正如StackOverflow标签数量所反映的那样),但它们的趋势很明显:一路向上。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"StackOverflow上各种编程语言的标签数量快照。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"鉴于目前Python语言无处不在,这些新语言中的任何一种都肯定需要五年甚至整个十年的时间才能取代它。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"赢家将是哪种语言,是Rust、Go、Julia,还是未来出现的某种新语言 ,目前还很难说。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但考虑到Python架构中的基本性能问题,总会有某种语言占据一席之地。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文链接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/thenextweb.com\/news\/why-python-not-programming-language-future-syndication","title":"","type":null},"content":[{"type":"text","text":"https:\/\/thenextweb.com\/news\/why-python-not-programming-language-future-syndication"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章