社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

聊聊 Python 的内置电池

豌豆花下猫 • 4 年前 • 317 次点击  
阅读 7

聊聊 Python 的内置电池

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。

原文地址:mp.weixin.qq.com/s/XzCqoCvcp…

(一)

最近,我突然想到一个问题:相比其它语言,有哪些概念或习惯叫法是 Python 特有的?

在朋友圈提出这个问题后,我得到最多的回复是——Pythonic 。这个回复一点都不意外,名字中自带 Python 的,当然是特有的啦,与它相似的,还有 Pythonista

这两个词是啥意思呢?Python 圈内流传着一个说法“人生苦短,我用 Python”,人们相信存在着最佳的实践方式,采用这种方式是最美的、最高效的、最优雅的,也即是 Pythonic ,而这样做的人(或以此为追求的人)则自称是 Pythonista。这个称号是有别于 Pythoner 或者 Pythonist 的,简单地说就是,它更有追求、更有逼格。

除了以上两个,Python 还有众多独特的叫法,例如终生仁慈独裁者、装饰器、上下文管理器、推导式与生成式、鸭子类型、猴子补丁、魔术方法、GIL、内置电池,等等。它们有的并不是 Python 所原创或独有,但是却因为它才广为人知,它们在 Python 中是代表性的存在物。

(二)

这些内容都很有意思,本文唯独想聊聊它——内置电池

Batteries Included 这个叫法是 Python 特有的,它指的是 Python 拥有“内置电池”,也就是自带丰富多样的标准库,开箱即用,动力十足。

在《PEP 206 -- Python Advanced Library》中,它提出了“内置电池的哲学”(Batteries Included Philosophy):拥有丰富而通用的标准库,无需用户单独下载就能立即使用。还说这使得 Python 领先于很多项目。

根据官方文档显示,Python 内置了 200 多个标准库,类型丰富多样,包括字符处理、数据类型、数值计算、文件处理、并发执行、网络通信、多媒体服务、图形界面、调试与开发、以及操作系统专有服务等等。

内置电池为 Python 提供了一种自给自足的能力(self-sufficient),在大多数情况下,用户不需要再去下载和安装单独的软件包,因此也免去一大堆的依赖问题的折磨。

(三)

某些编程语言中也有内置电池的概念,例如 Perl、Ruby、PHP等等,还有的语言会强调自己内置了强大的功能,例如 Erlang(一切皆进程)、Go(goroutine 机制)。

然而,这个叫法在 Python 中被叫得最响,也被推广到了技术生态中的其它项目里,几乎成了 Python 的专有名词。

在维基百科上搜索“Batteries Included”,该条目有 4 个解释,其中之一表明它是 Python 的 Motto ,这个词的意思是座右铭、格言、箴言,足见分量之重了吧。

(四)

内置电池做不到无所不包,因此需要所谓的第三方库,而 Python 也以三方库丰富而闻名。

PyPIPython Package Index 的简称,即 Python 库索引,是一个用来管理三方库的项目,根据网站显示,目前有 18 万个三方库,以及它们的 135 万个发行版本。

就是说,Python 也拥有强大的外置电池,所以其实它是 双驱动 的。

(五)

双驱动本来相安无事,互为表里,但是,内置电池却遭到了越来越多的指责。

在今年 5 月的官方 PyCon 大会上,演讲嘉宾 Amber Brown 做了专门的分享,主要话题就是吐槽这内置电池正在“漏电”(Leaking):

  • 应用程序需要的不仅仅是标准库
  • 质量差,功能落后,代码过时
  • 标准库模块排挤创新

她的想法是移除一些标准库,例如 asyncio 及大多数的新特性,迁移到 PyPI,拥抱社区。这样做的预期效果是:内置电池会变得轻量小型化、高质量,同时三方库的生态系统也能得到进化。

其他开发人员对这个话题也进行了讨论。

标准库的维护团队表示,迁移部分模块的工作已经在展开了,但这需要经过仔细的设计,另外,不容忽视的是,迁移库到 PyPI 也要求测试配置的工作量。

还有人提出反对意见,认为精简标准库可能会破坏下游代码,而且有的企业用户只信任标准库而排斥三方库,这无疑会增加用户的负担。

(六)

我们的很多电子设备都是由电池驱动的,虽然它们的形式与材质各种各样,但是不可避免会遇到老化的问题(某种手机甚至会爆炸)。

Python 的内置电池也不例外,可是,这个电池的修理或替换,却不像物理世界的电池那般容易。

官方在十几年前提出了 PEP-206 与 PEP-3108,那时核心开发者们就发现有些标准库容易被入侵、设计不佳、有更好的替代库,因此推荐了很多款第三方库,以作为标准库的替代选项。这些年来,很多废弃的库已退出舞台,但更多的新库也加了进来,革命尚未成功。

今年 5 月,在 PyCon 大会引发的讨论之后,有开发者发起了 PEP-594,提议将“坏死的电池”(dead batteries)移出标准库。

目前,该 PEP 仍处于草案(Draft)状态,但已基本成为社区共识。

PEP 中提议移除工作从 Python 3.8 开始,因为它的发布时间刚好在 Python 2.7 停止维护之前,可以平滑地承接大版本迁移的用户。然后,按照有序的清理计划,最终在 Python 3.10 版本完成所有废弃模块的移除。

也就是说,内置电池的“手术”加速了,未来几年里,这将成为一个常态。

(七)

内置电池的哲学助力了 Python 发展壮大,攻城略地,成为最主流的编程语言之一。

然而它面临的挑战是:功能齐备与轻量可维的矛盾、官方支撑与社区分治的选择,因此,必然会走到今天的局面。

正如任何大型项目都可能遇到内存泄漏与性能退化的问题一样,Python 这个项目也是。剔除坏死的组织,精兵简政,革故鼎新,跟上时代,这些是 Python 核心团队正在做的事。

从去年末以来,我持续关注着 Python 最高决策层的选举,而在上个月,我恰好翻译了一篇文章《GIL 已经被杀死了么?》介绍了 GIL 的移除计划。

这些事件都表明着一件事:Python 充满活力,大蟒蛇蜕皮后,将会迎来新生。

我们何其幸运,正好作为见证者。其它就不用多说了,重温一下这个伟大的口号吧——人生苦短,我用 Python。

公众号【Python猫】, 本号连载优质的系列文章,有喵星哲学猫系列、Python进阶系列、好书推荐系列、技术写作、优质英文推荐与翻译等等,欢迎关注哦。后台回复“爱学习”,免费获得一份学习大礼包。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34706
 
317 次点击