python3鄙视python2_Python3 正在毁灭 Python的原因分析

Python 3毫不费力地成为发生在Python社区里最糟糕的事。我还记得第一次使用Python的时候,我还在花大量时间在C++这块上,而Python就像是我的一次开光。我可以打开文本编辑器用几秒钟或者几分钟写出一个可以工作的程序,而不是用几小时或几天。我记得Python 2.5出来的时候,带来了一大堆崭新的简洁的语言特性。我爱Python,但是我承认它有弱点,但是没关系,所有编程语言都有。它强大的地方使其变得有趣。Python 3相比Python 2拥有一些小小的增量的改进,但同时却失去了很多Python 2强大的东西。

Python 2强大的一个地方是它身后巨大的第三方库,恩,可以做任何事。Python 3没有这个。是的,很多库已经移植了,但是仍然有数以十倍的库没有移植过去,而且也不太容易。举个例子,你需要解析X格式,而X解析起来并不简单,它不是常见的像YAML或JSON的格式。很有可能这个为X的解析器在Python 2里已经写好了,但是还没有移植到Python 3。另外,考虑到Python 2的字节字符串(str)和Python 3的字节字符串(bytes)之间的根本不同,移植起来将不会那么容易。事实上会很难移植,并且需要一点移植技巧,像维护Python 2和Python 3的兼容性那样。因此,你有一些选择,可以用Python 2(一个被弃用的语言)快速写你的app,导入一些库(还有它们所有的依赖),可能会有十倍之长;或者可以用另外的编程语言,它也有很多第三方库,但是不会面临Python 2/3的问题。第二个选择显然不是很流行,因为不然,我们就有大量Python 3写的app产品,然后Python 2的一大批库会被移植过来。(译者注:这个逻辑貌似有点问题?)这两种都没有发生。人们要么继续用Python 2写软件,要么选择另一个不自己打脸的语言。

另外一个Python 2的强大之处是用它写的程序几乎总是能够不用大量修改而运行在Python的下一个版本上。如果你的公司运营在用Python 2写的软件上(就像很多公司那样),移植到Python 3将会消耗大量资金,因为你的requirements文件可能十分大,并且充斥着各种还没有移植到Python 3的库。没有哪个理智的商业理由会花成百上千甚至百万美元价值的开发时间来移植到Python 3。如果相比更便宜的话,你都可能会要求某某把他们整个代码库移植到Ruby。现在如果你必须要重写你的软件的话,你会选择Python 3吗?不。

那些支持Python 2和3的比较流行的库几乎都只用该语言的子集,这样在两个平台上就都能运行。SQLAlchemy,我喜爱的Python库之一,它这样做的很好。Django也如此,但是做得不那么好。这个语言子集,我会称之为Python X,使用起来很没意思,需要一些奇淫技巧,并且通常没有Python 2或者Python 3强大。把Python 2的库移植到Python X有意思吗?很可悲的是一点意思都没有,因为令Python伟大的就是这些乐趣。

Python 2,很可悲,已经被弃用了。Python 3颓废得没人用。Python 3的改动不大。没有带来多少好处,但缺失去了很多。在过去的几个月,我用Python 3构建了一些项目和服务。我没有被它打败。这很像用Python 2写软件,除了只能获得很少的一些库。这里没有什么令人惊叹的事情。Python社区在过去的几年本应该转移到Python 3了,但是结果就是越来越明显看到人们转移到新的语言(或者重新发现的旧语言)上。这些语言有些也有很好的特性,像强大的输入系统,模式匹配,更出色的性能,更好的多线程和并发,更简单的外部函数接口(FFI),更漂亮的lambda语句等等。

一个方案是fork Python 2.7,然后继续发展这门语言,加入一些尽量向后兼容的特性,这样那些不能移植(由于一些财政方面的约束)的Python 2应用程序可以继续演进和改善,进而给那些投入如此多时间开发他们的公司或个人带来价值。这才是需要去做的正确的事(事实上,如果Guido和Python社区里其他主导人能够官方地做这件事,而不是强迫大家fork,那会是最好的)。Python 3里的特性可以向后移植到Python 2,然后发布Python 2.8。那些已经花时间用纯Python 3写新的软件的人可以使用例如3to2的工具变成与Python 2.8兼容。Python 3然后就可以为了Python库维护者们能够用Python 2代替Python X而安静地离去。

还有一些其他的方案,但是拯救Python 2显然是要做的正确的事,所以也不值一提了。Python 2的拯救不会来自官方,因为负责这类事的人表现出了对Python 2使用者极大的鄙视。如果社区的人不团结起来拯救Python 2,Python 3数年之后会成为Python的标准,然后很多库将要被移植(尽管很多肯定不会),然后很多的投入也将会白费。社区那时候会大量的萎缩,并失去往日的光芒。参考Perl。人们将把它遗忘。

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

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

相关文章

Java如何加载类的呢?

JVM加载类 首先查看内存中是否存在该类(内存中所有类都是以Class的实例对象存在),若不存在则会通过环境变量中的路径值在电脑或者其它设备的硬盘中找到该类(即.class文件),然后JVM会将其读取到内存中&…

brew卸载jenv_使用brew,cask和jenv在MacOSX上设置多个Java JRE / JDK

brew卸载jenv昨天在Java9的Jigsaw HackTheTower事件中,我意识到我需要加强我的游戏并改善我现有的机制,以在我的机器上维护几个不同的JDK。 我曾经手动下载jdk,或使用brew cask来安装它们,我会在我的〜/ bash_profile中设置bash …

java过滤器api_springboot集成过滤器

封装自定义接口filter包含两个方法,第一个过滤的路径数组,第二个为过滤器执行的顺序.spring boot 会按照order值的大小,从小到大的顺序来依次过滤。package com.theeternity.common.baseFilter;import javax.servlet.Filter;/*** program: ApiBoot* description: 封…

Servlet 运行原理

文章目录Servlet 如何运行演示 Servlet 运行原理Servlet 如何运行 用户向浏览器地址栏输入:http://ip:port/helloweb/sayHello?namezs 浏览器使用 ip:port(端口号)连接服务器 浏览器将请求数据按照 http 协议打成一个数据包(请求数据包)发送给服务器 请求数据包…

python dicom 器官分割_python+opencv阈值分割

37 #获取像素点的最大值和最小值38 arr_temp np.reshape(img_arr,(lens,))39 max_val max(arr_temp)40 min_val min(arr_temp)41 #图像归一化42 img_arr (img_arr-min_val)/(max_val-min_val)43 #绘制图像并保存44 #保存图片时去掉周围白边45 plt.axis(off)46 fig plt.gcf()47…

解析浏览器访问服务器 Servlet 应用程序的交互过程(Servlet 容器如何处理请求资源路径)

案例 1: 请求资源路径:http://localhost:8080/web01/greeting?namezs 浏览器通过 localhost:8080 连接服务器;服务器在 webapps 目录下寻找 web01 目录,找到后进入web01 目录内寻找 WEB-INF 目录,在进入 WEB-INF 目…

java github_GitHub Research:超过50%的Java记录语句写错了

java github为什么生产日志无法帮助您找到错误的真正根本原因? 询问您是否使用日志文件监视您的应用程序几乎就像询问…您是否喝水。 我们都使用日志,但是我们如何使用它们则是一个完全不同的问题。 在下面的文章中,我们将对日志进行更深入…

yolov5论文_YOLOv5的妙用:学习手语,帮助听力障碍群体

编辑:魔王、杜伟计算机视觉可以学习美式手语,进而帮助听力障碍群体吗?数据科学家 David Lee 用一个项目给出了答案。如果听不到了,你会怎么办?如果只能用手语交流呢?当对方无法理解你时,即使像订…

python制作系统程序与html交互_python+html语音人物交互_flask后台与前端(html)交互的两种方法...

基于python flask框架搭建webflask后台与前端(html)交互的两种方法:方法1 使用flask-wtf 提供的表单用常见的登录为例:// An highlighted blockfrom flask_wtf import Formclass LoginForm(Form): # 登录表单ROLE SelectField(角色, choices[(s, 管理员…

Java 程序执行过程的内存流程图(结合类加载器 ClassLoader 讲解)

Student s new Student(); s.play(); Student s2 new Student();以上代码的执行流程如下: JVM 作为操作系统的一个迚程在系统中执行,那么系统会为 JVM 分配一块内存空间,这块内存空 间被 JVM 分为 3 大块(栈区、堆区、方法区) 一般而言&a…

java javap_javap的用途不断发展:您的Java类文件中隐藏了什么?

java javap什么是Javap,如何使用它以及何时要反汇编类文件? 作为Java开发工具包(JDK)的一部分,我们可以使用许多工具,这些工具有助于更好地理解Java代码。 这些工具之一是javap命令,它使我们能…

虚拟内存越大越好吗_手机的运行内存真的是越大越好吗?6GB和8GB到底又该如何选择?...

许多人买手机,除了看处理器、外观以外,关注最多的莫过于手机的运行内存了。选择一个合适的运行内存几乎关系到整个手机使用寿命和命脉。那么我们现在买手机选择多大的运行内存合适呢?真的是越大越好吗?下面我们就来一起看看吧。选…

Adobe PhotoShop(PS) for Windows 快捷键/PS快捷键

文章目录一、工具栏二、文件操作三、选择功能四、视图操作五、编辑操作六、图像调整七、图层操作一、工具栏 功能说明快捷键备注移动工具V矩形、椭圆选框工具M套索、多边形套索、磁性套索L快速选择工具、魔棒工具W裁剪、透视裁剪、切片、切片选择工具C吸管、颜色取样器、标尺、…

kafka和storm集成_Storm和Kafka集成的重要生产错误和修复

kafka和storm集成我将在此处描述Storm和Kafka集成模块的一些细节,一些您应该意识到的重要错误以及如何克服其中的一些错误(尤其是对于生产安装)。 我在生产安装中大量使用Apache Storm,并将Kafka作为主要输入源(Spout…

显微镜自动聚焦原理是什么_什么是共聚焦显微镜?你了解过共聚焦显微镜吗?...

更出色的表面分析ZEISS Smartproof 5产品表面粗糙度质量控制ZEISS Smartproof 5是一款集成式转盘共聚焦显微镜,依托孔径关联技术将传统共聚焦显微镜的高分辨率与转盘系统的高速采集相结合,能够高速、准确地采集表面3D数据。二维测量:距离、高…

java string args_java – 语法“final String … args”是什么意思/做什么?

Java中参数的省略号表示类型的vararg.因此,在您的情况下,…意味着您可以将任意数量的String参数传递给doInBackground方法.因此,您可以调用此方法doInBackground(“String1”,“String2”,“String3”)或doInBackground(“String1”)或doInBackground(“String1”,“String3”,…

Java 程序执行过程的内存流程图(手写稿)

操作系统会分配一定的内存空间给JVM,空间大小可以在JVM里面设置,JVM会将内存分为三个区域:栈、堆、方法区。

unsafe jdk9_JDK 9清单:Project Jigsaw,sun.misc.Unsafe,G1,REPL等

unsafe jdk9Java 9距离(希望)数月了,现在该回顾一下即将发生的变化以及您应该采取的措施 Java 9即将来临(我们正在计算到达的日子 ),其中包含一系列新功能和改进功能。 这就是为什么我们决定创建一份清单来…

DAO 学习笔记

文章目录什么是 DAO?如何写 DAO?示例代码什么是 DAO? Data Access Object(DAO),数据访问对象/数据存取对象。DAO 是封装数据库访问逻辑的组件/类 。 定义一个类,这个类中的方法封装了数据库访问逻辑,要访问数据库时,只要调用…

dc/os_DC / OS中具有Java和数据库应用程序的服务发现

dc/os该博客将展示一个简单的Java应用程序如何使用DC / OS中的服务发现与数据库进行对话。 为什么要进行服务发现? 应用程序通常由多个组件组成,例如应用程序服务器,数据库,Web服务器,缓存和消息传递服务器。 通常&am…