或許你是乙個初入門python的小白,完全不知道pep是什麼。又或許你是個學會了python的熟手,見過幾個pep,卻不知道這玩意背後是什麼。那正好,本文將系統性地介紹一下pep,與大家一起加深對pep的了解。
目前,國內各類教程不可勝數,雖然或多或少會提及pep,但籠統者多、侷限於某個pep者多,能夠詳細而全面地介紹pep的文章並不多。
本文的目的是:盡量全面地介紹pep是什麼,告訴大家為什麼要去閱讀pep,以及列舉了一些我認為是必讀的pep,最後,則是蒐羅了幾篇pep的中文翻譯,希望能為python學習資料的漢化,做點拋磚引玉的貢獻。
pep的全稱是python enhancement proposals
,其中enhancement是增強改進的意思,proposals則可譯為提案或建議書,所以合起來,比較常見的翻譯是python增強提案
或python改進建議書
。
我個人傾向於前乙個翻譯,因為它更貼切。python核心開發者主要通過郵件列表討論問題、提議、計畫等,pep通常是彙總了多方資訊,經過了部分核心開發者review和認可,最終形成的正式文件,起到了對外公示的作用,所以我認為翻譯成「提案」更恰當。
pep的官網是:這也就是pep 0 的位址。其它pep的位址是將編號拼接在後面,例如: 就是pep 20 的鏈結,以此類推。
第乙個pep誕生於2023年,現在正好是18歲成年。到目前為止,它擁有478個「兄弟姐妹」。
官方將pep分成三類:
p - process pep
s - standards track pep
其含義如下:
資訊類:這類pep就是提供資訊,有告知類資訊,也有指導類資訊等等。例如pep 20(the zen of python,即著名的python之禪)、pep 404 (python 2.8 un-release schedule,即宣告不會有python2.8版本)。
流程類:這類pep主要是python本身之外的周邊資訊。例如pep 1(pep purpose and guidelines,即關於pep的指南)、pep 347(migrating the python cvs to subversion,即關於遷移python**倉)。
標準類:這類pep主要描述了python的新功能和新實踐(implementation),是數量最多的提案。例如我之前提到過的f-string方式,它出自pep 498(literal string interpolation,字面字串插值)。
每個pep最初都是乙個草案(draft),隨後會經歷乙個過程,因此也就出現了不同的狀態。以下是乙個流程圖:
d – deferred proposal 延期提案
f – final proposal 最終提案
p – provisional proposal 暫定提案
r – rejected proposal 被否決的提案
s – superseded proposal 被取代的提案
w – withdrawn proposal 撤回提案
在pep 0(index of python enhancement proposals (peps))裡,官方列舉了所有的pep,你可以按序號、按型別以及按狀態進行檢索。而在pep 1(pep purpose and guidelines)裡,官方詳細說明了pep的意圖、如何提交pep、如何修復和更新pep、以及pep評審的機制等等。
無論你是剛入門python的小白、有一定經驗的從業人員,還是資深的黑客,都應該閱讀python增強提案。
依我之見,閱讀pep至少有如下好處:
(1)了解python有哪些特性,它們與其它語言特性的差異,為什麼要設計這些特性,是怎麼設計的,怎樣更好地運用它們;
(2)跟進社群動態,獲知業內的最佳實踐方案,調整學習方向,改進工作業務的內容;
(3)參與熱點議題討論,或者提交新的pep,為python社群貢獻力量。
說到底,學會用python程式設計,只是掌握了皮毛。pep提案是深入了解python的途徑,是真正掌握python語言的一把鑰匙,也是得心應手使用python的一本指南。
pep 0 -- index of python enhancement proposals
pep 7 -- style guide for c code,c擴充套件
pep 8 -- style guide for python code,編碼規範(必讀)
pep 20 -- the zen of python,python之禪
pep 202 -- list comprehensions,列表生成式
pep 274 -- dict comprehensions,字典生成式
pep 234 -- iterators,迭代器
pep 257 -- docstring conventions,文件注釋規範
pep 279 -- the enumerate() built-in function,enumerate列舉
pep 282 -- a logging system,日誌模組
pep 285 -- adding a bool type,布林值(建議閱讀《python物件的身份迷思:從全體公民到萬物皆數》)
pep 289 -- generator expressions,生成器表示式
pep 318 -- decorators for functions and methods,裝飾器
pep 342 -- coroutines via enhanced generators,協程
pep 343 -- the "with" statement,with語句
pep 380 -- syntax for delegating to a subgenerator,yield from語法
pep 405 -- python virtual environments,虛擬環境
pep 471 -- os.scandir() function,遍歷目錄
pep 484 -- type hints,型別約束
pep 492 -- coroutines with async and await syntax,async/await語法
pep 498 -- literal string interpolation python,字串插值
pep 525 -- asynchronous generators,非同步生成器
pep 572 -- assignment expressions,表示式內賦值(最爭議)
pep 3105 -- make print a function,print改為函式
pep 3115 -- metaclasses in python 3000,元類
pep 3120 -- using utf-8 as the default source encoding
pep 3333 -- python web server gateway inte***ce v1.0.1,web開發
pep 8000 -- python language governance proposal overview,**r老爹推出決策層後,事關新決策方案
關於pep,知乎上有兩個問題,推薦大家關注:哪些pep值得閱讀(如何看待pep 572(
雖無確切資料作證,我國python開發者的數量應該比任何國家都多。然而,縱觀pep 0 裡面列舉的200多個pep作者,我只看到了乙個像是漢語拼音的國人名字(不排除看漏,或者使用了英文名的)。反差真是太大了。
我特別希望,國內的python黑客們的名字,能越來越多地出現在那個列表裡,出現在python核心開發者的列表裡。
此外,關於對pep的貢獻,還有一種很有效的方式,就是將pep翻譯成中文,造福國內的python學習社群。經過一番搜尋,我還沒有看到系統性翻譯pep的專案,只找到了零星的對於某個pep的翻譯。
我用心蒐集了幾篇中文翻譯成果,分享給大家:
pep8--
pep257--
pep328--
pep333--
pep484--
pep492--
pep541--
pep3107--
pep3333--
原文發布時間為:2018-11-12
python中文社群」,了解相關資訊可以關注「
python中文社群」。
學習Python,怎能不懂點PEP呢?
或許你是乙個初入門python的小白,完全不知道pep是什麼。又或許你是個學會了python的熟手,見過幾個pep,卻不知道這玩意背後是什麼。那正好,本文將系統性地介紹一下pep,與大家一起加深對pep的了解。目前,國內各類教程不可勝數,雖然或多或少會提及pep,但籠統者多 侷限於某個pep者多,能...
學習Python,怎能不懂點PEP呢?
或許你是乙個初入門python的小白,完全不知道pep是什麼。又或許你是個學會了python的熟手,見過幾個pep,卻不知道這玩意背後是什麼。那正好,本文將系統性地介紹一下pep,與大家一起加深對pep的了解。目前,國內各類教程不可勝數,雖然或多或少會提及pep,但籠統者多 侷限於某個pep者多,能...
photoshop高手怎能不知 PS快捷鍵大全
工具箱 多種工具共用乙個快捷鍵的可同時按 shift 加此快捷鍵選取 矩形 橢圓選框工具 m 移動工具 v 套索 多邊形套索 磁性套索 l 魔棒工具 w 裁剪工具 c 切片工具 切片選擇工具 k 噴槍工具 j 畫筆工具 鉛筆工具 b 像皮圖章 圖案圖章 s 歷史畫筆工具 藝術歷史畫筆 y 像皮擦 背...