热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

聊聊Python的内置电池

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。原文地址:https:mp.weixin.qq.comsXzCqoCvcpFJt4A-E4WMqaA(一)最近,我

本文原创并首发于公众号【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 也以三方库丰富而闻名。

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与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 本文详细探讨了使用Python3编写爬虫时如何应对网站的反爬虫机制,通过实例讲解了如何模拟浏览器访问,帮助读者更好地理解和应用相关技术。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • 本文深入探讨了使用Puppet进行软件包分发与管理的方法。首先介绍了fpm这一跨平台的软件包制作工具,其简便的操作流程使得软件包的创建变得轻松快捷。fpm的项目地址为:https://github.com/jordansissel/fpm。通过结合Puppet和fpm,可以实现高效、可靠的软件包管理和部署。 ... [详细]
  • Python作为当今IT领域中最受欢迎且高效的语言之一,其框架能够显著加速Web应用程序的开发过程。本文推荐并对比了十大顶级Python Web开发框架,其中CubicWeb以其卓越的代码重用性和模块化设计脱颖而出,为开发者提供了强大的支持。 ... [详细]
  • 阿里云 Aliplayer高级功能介绍(八):安全播放
    如何保障视频内容的安全,不被盗链、非法下载和传播,阿里云视频点播已经有一套完善的机 ... [详细]
  • C语言编写线程池的简单实现方法
    2019独角兽企业重金招聘Python工程师标准好文章,一起分享——有时我们会需要大量线程来处理一些相互独立的任务,为了避免频繁的申请释放线程所带 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文是Java并发编程系列的开篇之作,将详细解析Java 1.5及以上版本中提供的并发工具。文章假设读者已经具备同步和易失性关键字的基本知识,重点介绍信号量机制的内部工作原理及其在实际开发中的应用。 ... [详细]
  • 在尝试对从复杂 XSD 生成的类进行序列化时,遇到了 `NullReferenceException` 错误。尽管已经花费了数小时进行调试和搜索相关资料,但仍然无法找到问题的根源。希望社区能够提供一些指导和建议,帮助解决这一难题。 ... [详细]
  • 深入解析Tomcat:开发者的实用指南
    深入解析Tomcat:开发者的实用指南 ... [详细]
author-avatar
文竹
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有