本文原創並首發於公衆號【Python貓】,未經受權,請勿轉載。編程
原文地址:https://mp.weixin.qq.com/s/XzCqoCvcpFJt4A-E4WMqaA網絡
(一)併發
最近,我忽然想到一個問題:相比其它語言,有哪些概念或習慣叫法是 Python 特有的?async
在朋友圈提出這個問題後,我獲得最多的回覆是——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進階系列、好書推薦系列、技術寫做、優質英文推薦與翻譯等等,歡迎關注哦。後臺回覆「愛學習」,免費得到一份學習大禮包。