python会不会出4_无极4网人生苦短,Python会不会被取代?国外网友

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。

人生苦短,我该不该选择Python?

编程语言几年一变样,榜单之争也是愈演愈烈,还架不住时不时杀出个黑马……

而对于Python,自2010年初以来一直蓬勃发展至今,在流行程度上,也超越了C、C++、Java等老牌编程语言。

那么问题来了:

这种趋势将持续到什么时候?最终会因何故被其他语言取代?

对于Python是不是the language of the future,无极4新闻平台网友们展开就此展开一番激辩。

反方:必然会有一种语言取代Python

一位名叫Rhea Moutafis的网友认为,Python不会是“未来的编程语言”。观点仅发布数日,便得到了10.2k的点赞。

他从“流行原因”、“缺点”以及“何时、何故被取代”三方面做了阐述。

Python为何现在如此流行?

Moutafis认为,Python的成功,一定程度体现在Stack Overflow的趋势上。这个平台衡量了发布帖子中的标签数量,再考虑到它的规模,对于“受欢迎编程语言”来说是个不错的指标。

从图中可以看出,R语言在过去几年中处于稳步增长的状态,但其他语言,像C#、C++、Java和JavaScript,都有下降的趋势。

而在所有Stack Overflow的问题中,几乎有14%的问题被贴上了 “Python “的标签,而且这个趋势还在上升。

Moutafis认为,原因有如下3个方面。

首先,Python也算是一个老牌语言。

Python从90年代便已出现,这不仅意味着它有足够的时间来发展,还意味着拥有一个庞大而强有力的社区支持。

所以你在用Python编程的时候,如果遇到了任何问题,只要网上搜索一下,大概率就能解决掉。

因为很有可能在你之前,就有人遇到过同样的问题,还在网上留下了宝贵的意见。

其次,Python对于初学者来说是友好的。

对于这一点,并不是说它存在了几十年,给了程序员们充足的时间来写使用教程。而是Python的语法易读性特别好。

例如你不需要指定数据类型,只要声明一个变量,Python会根据上下文,理解这个变量是属于整数、浮点数、布尔值等等。

这对于初学者来说优势是巨大的。如果你用过C++,你就有可能体会到这样的痛苦:程序跑不出来,可能仅仅是因为把一个浮点数指定成了整数……

以及,如果对比着读过Python和C++的代码,你就能深刻的体会到Python代码理解起来是有多么容易。

最后,Python的用于很广。

Python从出现至今,开发人员几乎在各个领域、用途方面开发了包(package):

想处理数字、向量和矩阵?Numpy是的你首选。

想进行技术和工程方面的计算?SciPy了解一下。

想在数据处理和分析领域大展身手?Pandas值得一试。

想涉足人工智能?Scikit-Learn真香(褒义……)。

无论你想处理哪种计算任务,Python几乎都可以提供相应的包。从近几年机器学习的激增,也不难看出Python一直处于发展的前沿。

Python的缺点是否具有致命性?

当然,没有一个技术是完美的,Python也不例外。Moutafis列出了6个最重要的缺陷,还评估了它们是否具有致命性。

第一,速度 (Speed)。

平均来说,用Python运行一个任务所需要的时间,是其他语言的2-10倍。

为什么会这样呢?其中一个原因就是它是动态类型。

就像刚才说的,你不需要指定数据类型,这就意味着它需要使用大量的内存,因为程序需要为每个变量预留足够的空间,确保在任何情况下都能工作。而大量的内存使用量,意味着大量的计算时间。

另一个原因是Python一次只能执行一个任务。这是灵活数据类型的结果——Python需要确保每个变量只有一个数据类型,而并行进程可能会把这一点搞得一团糟。

相比之下,一般的Web浏览器一次可以运行12个不同的线程……

但说到底,这些速度问题都无关紧要。计算机和服务器现在很便宜了,用户并不真正关心他们的应用程序,是否在0.001或0.01秒内能加载完。

第二,作用域 (Scope)。

最初,Python是动态确定作用域的。这基本上就意味着,要对表达式求值,编译器首先需要搜索当前块,然后依次搜索所有调用函数。

动态作用域的问题在于,每个表达式都需要在每个可能的上下文中进行测试。这个是相当繁琐的过程,这也就是为什么大多数现代编程语言使用静态作用域的原因。

对于这个问题,Python试图过渡到静态作用域,但却搞砸了:通常,内部作用域能够查看和更改外部作用域,但在Python中,内部作用域只能看到外部作用域,而不能更改它们。

第三,Lambda。

尽管Python内部的灵活性很好,但Lambda的使用还是相当有限制的。Lambda只能是Python中的表达式,而不能是语句。

另外,变量声明和语句始终是语句,这意味着Lambda不能用于它们。

表达式和语句之间的这种区别,可以说是相当随意,在其他语言中就不会出现这种情况。

第四,空白符 (Whitespaces)。

在Python中,你可以用空格和缩进来表示不同级别的代码。这让它在视觉上很吸引人,也很容易理解

而其他语言,例如C++,更多的是依赖大括号和分号。虽然这可能并不吸引人,无极4网也不适合初学者,但它让代码的可维护性提高了很多。对于较大的项目来说,这就更有用了。

像Haskell这样的新语言就解决了这个问题:它们依赖于空格,但同时为那些希望不使用空格的人,提供了一种替代语法。

第五,移动开发 (Mobile Development)。

随着应用逐步从电脑桌面转向移动端,很明显我们需要强大的语言来构建移动软件。但用Python开发的移动应用并不多。

Python并不是为移动端开发而设计的,即便在基本任务上能达到差强人意的效果,但最好还是选择专门为移动端开发的语言,例如React Native、Flutter、Iconic和Cordova。

需要明确的是,笔记本和台式电脑仍会在未来存在一段时间。但由于移动端流量早已超过了桌面端,可以说,学习Python还不足以让你成为一个全能型开发者。

第六,Runtime Error。

一个 Python 脚本不是先编译,然后再执行。相反,它在每次执行时都会编译,所以任何编码错误都会在运行时显示出来。这导致性能差、时间消耗大,以及需要大量的测试

这对初学者来说是很好的,因为测试可以教给他们很多东西。但对于经验丰富的开发人员来说,不见得这是个好事。

在未来,何时、何故会让Python被取代

在编程语言这个市场上,出现了一批新的竞争者:

Rust提供了和Python一样的安全性——没有任何变量会被意外覆盖。但它用ownership和borrowing的概念解决了性能问题。根据StackOverflow Insights的数据,它也是过去几年来最受欢迎的编程语言之一。

Go对于Python初学者来说也是非常棒的一门语言。它非常简单,甚至代码维护起来更容易。有意思的一点是,Go开发者是市场上收入最高的程序员之一。

Julia是一门非常新的语言,可以与Python一较高下,它填补了大规模技术计算的空白。在大规模计算中,人们通常会使用Python或Matlab,然后用C++库进行修补。现在,只用Julia就可以了,不用再在两种语言之间来回切换。

虽然市场上有其他语言,但Rust、Go和Julia是修复Python弱点的语言。

所有这些语言都擅长于未来的技术,尤其是人工智能。虽然它们的市场份额仍然很小,但从StackOverflow标签的数量可以看出,它们上升的趋势都很明显。

考虑到目前Python的普遍流行,这些新语言要想取代它,肯定要花上五年,甚至整整十年的时间。

那么,取代Python的将是哪一种语言?Rust、Go、Julia,还是未来的新语言?

目前还很难说,但考虑到Python架构中的性能问题,必然会有一种语言取代它的位置。

正方:你的观点漏洞百出

反方一辩陈述完毕,接下来,是正方的观点。

用户miraculixx针对Moutafis的文章,发起了猛烈攻击,也获得了高度关注——2.1K的赞。

miraculixx直接开门见山:

这篇文章有够烂的。你喜欢Rust、Go和Julia?那就去写它们好了,不要来抨击Python。

而后,直接提出了七大错误之处。

Python并不慢

首先,速度有两个组成部分。

其一,你写出想要的程序有多快,这是客户和大多数开发人员真正关心的。Python对于一个命令行语言来说,它的速度是非常快的,大多数其他语言所需要的时间要长得多。

其二,是执行速度。正如你所指出的,在很多情况下,这几乎不重要,但当它有需要的时候,Python既有内置的工具来加速,也有广泛的工具生态系统来实现native速度 (与编译后的 C 代码相同)。

Python确实可以并行运行多个任务

与大多数其他语言不同,Python代码非常容易并行运行,甚至可以跨大型节点集群运行,这对于云计算来说非常好。

内置的多模块处理,可以在本地和远程节点上运行。还有其他工具,如Celery、IParallel、Dask等,让并行运行代码变得轻而易举。

缩进,作为代码块的分隔符,对任何项目来说都是一种优势

因为这样就能确保代码看起来与个人偏好无关,意味着更好的可读性,这通常会增加可维护性。

无论你有1个还是100个开发者,Python都很好用

大多数项目都只有1-5个开发者,而且,Python的模块化方法使得重构代码变得非常容易。

模块化是构建大型可维护软件产品的关键成功因素。

静态类型不是可扩展团队的关键因素

根据我的经验,静态类型的影响如果不损害协作能力的话,也是可以忽略的。

团队实际开发过程中的细节情况,超过出了你写的评论,一言以蔽之:静态类型很难做到处处都是对的,当出现问题的时候,还是需要更多人加入到团队来解决。

团队规模越大,沟通成本就越高,以n2的速度增长。也就是说,

Python并不老

Python最新版本是在2019年第四季度发布的。无论是语言还是它所支持的用例,都不能说是“老”。

你说它不能在浏览器中运行不仅是错误的,而且也没有抓住重点。大多数语言都不能在浏览器中运行,因为Web语言是JavaScript。不管你喜不喜欢,事情就是这样。

React、Flutter等都不是编程语言

把不该比较的东西混为一谈,对你文章的可信度并没有什么好处。

......

那么,你觉得Python未来的命运会是什么样呢?

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/457564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 音频播放总结 soundlPool,MediaPlay

soundlPool 用于小音频的播放多个同时播放。 使用步骤: 步骤一: 首先下载音频文件可以将其放入assets文件夹下或者res下的raw文件夹下,区别在于assets下可以再新建文件夹而raw不行,assets内部单个文件超过1m时可能存在bug而raw不会…

文本分析软件_十大针对机器学习的文本注释工具与服务,你选哪个?

房地产和键【51CTO.com快译】目前,从搜索引擎与情感分析,到虚拟助手与聊天机器人,机器学习应用场景中的许多研究领域,都需要通过文本注释工具与服务来提供准确性。在AI研究与开发行业中,发现或创建可注释的数据对于项目…

sqlite创建表

create table bike (id varchar(6) primary key, password char(6));

python 垃圾回收机制

DAY 18. python垃圾回收机制 python GC主要有三种方式 引用计数标记清除分代回收 其中,以引用计数为主。 18.1 引用计数(Reference Counting) 《寻梦环游记》中说,人一生会经历两次死亡,一次是肉体死的时候&#…

曲线连接线_荷重位移曲线仪操作使用注意事项-荷重位移曲线仪厂家

荷重位移曲线仪广泛适用于各种按键及开关、DOME片、按键、微力弹片、硅胶按键、汽车开关之荷重-行程测定;Windows中英文双语软件,操作简单方便,软件流畅稳定,所有测试资料(测试条件,曲线,数据结果&#xff…

进程调度

1、策略 策略决定调度程序在何时让什么进程运行。调度器的策略往往决定系统的整体印象,并且,还要负责优化使用处理器时间。 1.1 I/o消耗型和处理器消耗型。 进程可以被分为I/O消耗型和处理器消耗型。前者指进程的大部分时间用来提交I/O请求或者等待I/O请…

Django,Ajax,Vue实现文章评论功能

Django评论 评论复杂的地方在于需要实现点击提交评论后评论内容需要立刻出现在下面,还要保持页面位置不变,所以提交后不能整体刷新页面,因为刷新以后页面肯定在最上面,而评论一般都在最下面,所以要用到Ajax 整个过程用…

回归分析什么时候取对数_冬蜜什么时候取,冬天取蜂蜜的方法

大家好,我现在分享的是,在冬天是在什么时候取蜜!冬天在我们南方,取蜜时间是十一月到十二月的时候,只要温度达到15度以上,蜂蜜封盖了就可以取蜜了,并且在冬天我们只能取一次,最晚取蜜…

Opencv与dlib联合进行人脸关键点检测与识别

前言 依赖库:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置,重点在实现上。使用libfacedetection实现人脸区域检测,联合dlib标记人脸特征点,最后使用opencv的FaceRecognizer实现人脸识别。 准备工作 1、配置好Op…

Category 的一些事

来源:伯乐在线 - Tsui YuenHong 链接:http://ios.jobbole.com/90422/ 点击 → 申请加入伯乐在线专栏作者 新增实践部分:偏方 Hook 进某些方法来添加功能 Category – 简介 Category(类别)是 Objective-C 2.0 添加的新特…

python tfidf特征变换_机器学习的“万能模板” - 数据分析

最后是文本变量。很遗憾Titanic数据集中没有合适的文本变量。一般我们处理文本变量的方法是,合并所有的文本形成一个变量,然后调用Count Vectorizer或者TfidfVectorizer算法,将文本数据转换成数字。大部分情况下,TfidfVectorizer比…

python实现哈希表

# python 实现哈希表class HashTable:"""哈希函数的构造解决冲突"""def __init__(self, source):self.source sourceself._index []self._val []self.table []self._mod 13def Output(self):print(self._index)print(self._val)def _create…

商品综合评价排名

店内有很多产品,而且包含但不局限于以下指标:浏览量、访客数、平均停留时长、详情页跳出率、下单转化率、下单支付转化率、支付转化率、下单金额、下单商品件数、下单买家数、支付金额、支付商品件数、加购件数、访客平均价值、收藏人数、客单价、搜索支…

ionic资源网站

http://ionichina.com/topic/570b1f4ecd63e4247a7cfcf3 http://doc.ionicmaterialdesign.com/#intro http://ionicmaterial.com/demo/ 10大materialhttp://www.open-open.com/news/view/192f93e转载于:https://www.cnblogs.com/znsongshu/p/6079357.html

pytorch神经网络因素预测_实战:使用PyTorch构建神经网络进行房价预测

微信公号:ilulaoshi / 个人网站:lulaoshi.info本文将学习一下如何使用PyTorch创建一个前馈神经网络(或者叫做多层感知机,Multiple-Layer Perceptron,MLP),文中会使用PyTorch提供的自动求导功能,训练一个神经…

SQL基本操作

SQL 操作 检索数据 SELECT 检索数据 -- 检索单个列 SELECT 列名 FROM table_name;-- 检索多个列 SELECT 列1, 列2 FROM table_name;-- 检索所有列 SELECT * FROM table_name;-- 检索不同的值 SELECT DISTINCT 列名 FROM table_name;限制检索结果 -- SQL Server / Access SE…

git 忽略 部分文件夹_git提交忽略某些文件或文件夹

记得第一次用 github 提交代码,node_modules 目录死活传不上去,哈哈哈,后来才知道在 .gitignore 文件里设置了忽略 node_modules 目录上传。是的, .gitignore 文件就是设置那些你不想用 git 一起上传的文件和文件夹。比如刚接触到…

Ajax实现原理详解

Ajax:Asynchronous javascript and xml,实现了客户端与服务器进行数据交流过程。使用技术的好处是:不用页面刷新,并且在等待页面传输数据的同时可以进行其他操作。 这就是异步调用的很好体现。首先得了解什么是异步和同步的概念。…

SpringJDBC解析3-回调函数(update为例)

PreparedStatementCallback作为一个接口,其中只有一个函数doInPrepatedStatement,这个函数是用于调用通用方法execute的时候无法处理的一些个性化处理方法,在update中的函数实现: protected int update(final PreparedStatementCr…

python上下文管理器

DAY 23. python上下文管理器 Python 的 with 语句支持通过上下文管理器所定义的运行时上下文这一概念。 此对象的实现使用了一对专门方法,允许用户自定义类来定义运行时上下文,在语句体被执行前进入该上下文,并在语句执行完毕时退出该上下文&…