PEP的全稱是Python Enhancement Proposals
,其中Enhancement是加強改進的意思,Proposals則可譯爲提案或建議書,因此合起來,比較常見的翻譯是Python加強提案
或Python改進建議書
。python
我我的傾向於前一個翻譯,由於它更貼切。Python核心開發者主要經過郵件列表討論問題、提議、計劃等,PEP一般是彙總了多方信息,通過了部分核心開發者review和承認,最終造成的正式文檔,起到了對外公示的做用,因此我認爲翻譯成「提案」更恰當。編程
PEP的官網是:https://www.python.org/dev/peps/,這也就是PEP 0 的地址。其它PEP的地址是將編號拼接在後面,例如:https://www.python.org/dev/peps/pep-0020/ 就是PEP 20 的連接,以此類推。異步
第一個PEP誕生於2000年,如今正好是18歲成年。到目前爲止,它擁有478個「兄弟姐妹」。async
官方將PEP分紅三類:ide
I - Informational PEP函數
P - Process PEP學習
S - Standards Track PEPui
其含義以下:編碼
信息類:這類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),隨後會經歷一個過程,所以也就出現了不一樣的狀態。如下是一個流程圖:
PEP process flow diagram
A – Accepted (Standards Track only) or Active proposal 已接受(僅限標準跟蹤)或有效提案
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提案已經累積產生了478個,咱們並不須要對每一個PEP都熟知,沒有必要。下面,我列舉了一些PEP,推薦你們一讀:
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 Interface v1.0.1,Web開發
PEP 8000 -- Python Language Governance Proposal Overview,GvR老爹推出決策層後,事關新決策方案
關於PEP,知乎上有兩個問題,推薦你們關注:哪些PEP值得閱讀(https://dwz.cn/7CHMBlLu),如何看待PEP 572(https://dwz.cn/L46jpzMB)。
雖無確切數據做證,我國Python開發者的數量應該比任何國家都多。然而,縱觀PEP 0 裏面列舉的200多個PEP做者,我只看到了一個像是漢語拼音的國人名字(不排除看漏,或者使用了英文名的)。反差真是太大了。
我特別但願,國內的Python黑客們的名字,能愈來愈多地出如今那個列表裏,出如今Python核心開發者的列表裏。
此外,關於對PEP的貢獻,還有一種頗有效的方式,就是將PEP翻譯成中文,造福國內的Python學習社區。通過一番搜索,我尚未看到系統性翻譯PEP的項目,只找到了零星的對於某個PEP的翻譯。
我用心蒐集了幾篇中文翻譯成果,分享給你們:
PEP8 -- https://dwz.cn/W01HexFD
PEP257 -- https://dwz.cn/JLctlNLC
PEP328 -- https://dwz.cn/4vCQJpEP
PEP333 -- https://dwz.cn/TAXIZdzc
PEP484 -- https://dwz.cn/dSLZgg5B
PEP492 -- http://t.cn/EALeaL0
PEP541 -- https://dwz.cn/ce98vc27
PEP3107 -- http://suo.im/4xFESR
PEP3333 -- https://dwz.cn/si3xylgw
最後,表達一下個人私心:
(1)但願本文能給你們帶來知識和見識的增加,激發一些小夥伴的學習熱情
(2)但願有小夥伴去翻譯更多的PEP,造福Python中文社區