Python 什么时候会被取代?

Stella981
• 阅读 444

Python 什么时候会被取代?

编译:CSDN-弯月,作者:Rhea MoutafisPython

经过了几十年的努力才得到了编程社区的赏识。自 2010 年以来,Python 得到了蓬勃发展,并最终超越了 C、C#、Java 和 JavaScript。但是,这种趋势将持续到什么时候?何时 Python 会被其他语言取代?被取代的原因又是什么呢?

对于 Python 被淘汰出局的确切日期有很多猜测,它可能会像科幻小说一样成为过去。在本文中,我将讨论促成 Python 大面积普及的优势,以及将来导致它陨落的弱点。

促成 Python 流行的因素

通过 Stack Overflow 发展趋势就可以洞悉 Python 的成功。考虑到 StackOverflow 的规模,我们可以认为这是衡量编程语言流行度的一个很好的指标。

尽管在过去几年中,R 语言的发展一直处于平稳状态,很多其他编程语言已开始稳步下降,但 Python 的增长似乎势不可挡。在所有 StackOverflow 的问题中,带有“python”标签的占到了 14%,而且这种趋势还在上升。其中的原因有很多。

Python 是一种古老的语言

Python 于 90 年代问世。这不仅意味着 Python 有足够的时间成长,而且还拥有了一个庞大的支持社区。因此,如果你在使用 Python 进行编程时遇到任何问题,只需上网搜索就可以得到答案。因为总是会有人在这之前就遇到了这个问题,并为此撰写了一些有用的资料。

对初学者很友好

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 体系结构中最基本的性能问题,其终将难逃被人替代的命运。

原文:https://towardsdatascience.com/why-python-is-not-the-programming-language-of-the-future-30ddc5339b66

最后,发起一个长期活动,每 15 天 (最后一天,明天公布)留言最多的人送上一本书或企鹅公仔。

今日问题:假如 python 真的过气了,下一个火起来的语言是什么呢?

推荐阅读:

30岁开始学编程晚吗?

为什么一定要学Go语言?

阿里出现S1级别事故,疑似内部员工人为导致

Python 什么时候会被取代?

本文分享自微信公众号 - 编程三分钟(coding3min)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Stella981 Stella981
2年前
Python之time模块的时间戳、时间字符串格式化与转换
Python处理时间和时间戳的内置模块就有time,和datetime两个,本文先说time模块。关于时间戳的几个概念时间戳,根据1970年1月1日00:00:00开始按秒计算的偏移量。时间元组(struct_time),包含9个元素。 time.struct_time(tm_y
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这