聊聊 Python 的内置电池

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。
原文地址:https://mp.weixin.qq.com/s/XzCqoCvcpFJt4A-E4WMqaA
(一)
最近,我突然想到一个问题:相比其它语言,有哪些概念或习惯叫法是 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 也以三方库丰富而闻名。
PyPI 是 Python 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 数据处理全家桶(Mysql 篇)
1. 前言 在爬虫.自动化.数据分析.软件测试.Web 等日常操作中,除 JSON.YAML.XML 外,还有一些数据经常会用到,比如:Mysql.Sqlite.Redis.MongoDB.Memch ...
- 最全总结 | 聊聊 Python 数据处理全家桶(Sqlite篇)
1. 前言 上篇文章 聊到 Python 处理 Mysql 数据库最常见的两种方式,本篇文章继续说另外一种比较常用的数据库:Sqlite Sqlite 是一种 嵌入式数据库,数据库就是一个文件,体积很 ...
- 最全总结 | 聊聊 Python 数据处理全家桶(Redis篇)
1. 前言 前面两篇文章聊到了 Python 处理 Mysql.Sqlite 数据库常用方式,本篇文章继续说另外一种比较常用的数据存储方式:Redis Redis:Remote Dictionary ...
- 最全总结 | 聊聊 Python 数据处理全家桶(Memcached篇)
1. 前言 本篇文章继续继续另外一种比较常用的数据存储方式:Memcached Memcached:一款高性能分布式内存对象缓存系统,通过 内存缓存,以减少数据库的读取,从而分担数据库的压力,进而提高 ...
- 最全总结 | 聊聊 Python 数据处理全家桶(配置篇)
1.前言 在实际项目中,经常会接触到各种各样的配置文件,它可以增强项目的可维护性 常用配件文件的处理方式,包含:JSON.ini / config.YAML.XML 等 本篇文章,我们将聊聊 Pyth ...
- 最全总结 | 聊聊 Python 办公自动化之 Excel(上)
1. 前言 在我们日常工作中,经常会使用 Word.Excel.PPT.PDF 等办公软件 但是,经常会遇到一些重复繁琐的事情,这时候手工操作显得效率极其低下:通过 Python 实现办公自动化变的很 ...
- 最全总结 | 聊聊 Python 办公自动化之 Excel(中)
1. 前言 上一篇文章中,我们聊到使用 xlrd.xlwt.xlutils 这一组合操作 Excel 的方法 最全总结 | 聊聊 Python 办公自动化之 Excel(上) 本篇文章将继续聊另外一 ...
- 最全总结 | 聊聊 Python 办公自动化之 Excel(下)
1. 前言 前面谈到 Python 处理 Excel 文件最常见的两种方式,即:xlrd/xlwt.openpyxl 其中, xlrd/xlwt 这一组合,xlrd 可以负责读取数据,而 xlwt ...
- 最全总结 | 聊聊 Python 办公自动化之 Word(上)
1. 前言 日常自动化办公中,使用 Python 真的能做到事半功倍! 在上一个系列中,我们对 Python 操作 Excel 进行了一次全面总结 最全总结 | 聊聊 Python 办公自动化之 Ex ...
随机推荐
- LMS自适应天线阵列设计 MATLAB
在自适应天线课上刚刚学了LMS自适应阵,先出一个抢先版贴一下结果,抢先某个小朋友一步. 关于LMS的具体介绍,直接看wiki里的吧,解释的比书上简明:传送门:https://en.wikipedia. ...
- 面试官:CPU百分百!给你一分钟,怎么排查?有几种方法?
Part0 遇到了故障怎么办? 在生产上,我们会遇到各种各样的故障,遇到了故障怎么办? 不要慌,只有冷静才是解决故障的利器. 下面以一个例子为例,在生产中碰到了CPU 100%的问题怎么办? 在生产中 ...
- 架构师成长之路5.2-Saltstack远程执行
点击架构师成长之路 架构师成长之路5.2-Saltstack远程执行 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需要FUNC工具配置才可以 ...
- UiPath之获取邮件相关信息
大家好,小U又来给大家分享UiPath文章,争取每一篇文章都给大家带来满满的干货. 本次案例是告诉大家如何使用GetOutLookMailMessage这个Activity, 案例的目的是将某个特定人 ...
- Rust 入门 (三)_下
这部分我们学习 rust 语言的 变量.数据类型.函数.注释.流程控制 这五个方面的内容.前文介绍了前两个内容,本文介绍后三个内容. 函数 函数在 rust 代码普遍存在,我们也已经见过了它的主函数 ...
- 九、Spring Boot 优雅的实现CORS跨域
前言 我们的springboot 架手架已经包含了mysql,redis,定时任务,邮件服务,短信服务,文件上传下载,以及docker-compose 构建镜像等等. 接下来让我们解决另一个常见的问题 ...
- 版本控制神器——git的基本使用
git基础命令 安装git windows的话,直接下载安装即可 Linux Ubuntu安装,apt-get install git Linux Centos安装,yum install git 配 ...
- CentOS 7 安装 bind 服务 实现内网DNS
目录 安装 配置 服务管理 测试 安装 废话不多说,直接安装 yum install -y bind bind-utils 配置 [root@jenkins named]# rpm -ql bind ...
- Xcode 7中http通信出现如下错误
Xcode 7中http通信出现如下错误:Application Transport Security has blocked a cleartext HTTP (http://) resource ...
- zsh: /usr/local/bin/pod: bad interpreter: /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby: no such file or directory
系统升级为 macOS Catalina 发现 CocoaPods 不管用了. 解决方法: 打开 iTerm2 sudo gem update --system 输入电脑密码,然后 sudo gem ...