前言
或許你是一個初入門Python的小白,完全不知道PEP是什么。又或許你是個學會了Python的熟手,見過幾個PEP,卻不知道這玩意背后是什么。那正好,本文將系統性地介紹一下PEP,與大家一起加深對PEP的了解。
目前,國內各類教程不可勝數,雖然或多或少會提及PEP,但籠統者多、局限于某個PEP者多,能夠詳細而全面地介紹PEP的文章并不多。
本文的目的是:盡量全面地介紹PEP是什么,告訴大家為什么要去閱讀PEP,以及列舉了一些我認為是必讀的PEP,最后,則是搜羅了幾篇PEP的中文翻譯,希望能為Python學習資料的漢化,做點拋磚引玉的貢獻。
PEP是什么?
PEP的全稱是Python Enhancement Proposals,其中Enhancement是增強改進的意思,Proposals則可譯為提案或建議書,所以合起來,比較常見的翻譯是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個“兄弟姐妹”。
官方將PEP分成三類:
I - Informational 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),是數量最多的提案。。
每個PEP最初都是一個草案(Draft),隨后會經歷一個過程,因此也就出現了不同的狀態。以下是一個流程圖:
A ?C Accepted (Standards Track only) or Active proposal 已接受(僅限標準跟蹤)或有效提案
D ?C Deferred proposal 延期提案
F ?C Final proposal 最終提案
P ?C Provisional proposal 暫定提案
R ?C Rejected proposal 被否決的提案
S ?C Superseded proposal 被取代的提案
W ?C Withdrawn proposal 撤回提案
在PEP 0(Index of Python Enhancement Proposals (PEPs))里,官方列舉了所有的PEP,你可以按序號、按類型以及按狀態進行檢索。而在PEP 1(PEP Purpose and Guidelines)里,官方詳細說明了PEP的意圖、如何提交PEP、如何修復和更新PEP、以及PEP評審的機制等等。
為什么要讀PEP?
無論你是剛入門Python的小白、有一定經驗的從業人員,還是資深的黑客,都應該閱讀Python增強提案。
依我之見,閱讀PEP至少有如下好處:
(1)了解Python有哪些特性,它們與其它語言特性的差異,為什么要設計這些特性,是怎么設計的,怎樣更好地運用它們;
(2)跟進社區動態,獲知業內的最佳實踐方案,調整學習方向,改進工作業務的內容;
(3)參與熱點議題討論,或者提交新的PEP,為Python社區貢獻力量。
說到底,學會用Python編程,只是掌握了皮毛。PEP提案是深入了解Python的途徑,是真正掌握Python語言的一把鑰匙,也是得心應手使用Python的一本指南。
哪些PEP是必讀的?
如前所述,PEP提案已經累積產生了478個,我們并不需要對每個PEP都熟知,沒有必要。下面,我列舉了一些PEP,推薦大家一讀:
PEP 0 ?C Index of Python Enhancement Proposals
PEP 7 ?C Style Guide for C Code,C擴展
PEP 8 ?C Style Guide for Python Code,編碼規范(必讀)
PEP 20 ?C The Zen of Python,Python之禪
PEP 202 ?C List Comprehensions,列表生成式
PEP 274 ?C Dict Comprehensions,字典生成式
PEP 234 ?C Iterators,迭代器
PEP 257 ?C Docstring Conventions,文檔注釋規范
PEP 279 ?C The enumerate() built-in function,enumerate枚舉
PEP 282 ?C A Logging System,日志模塊
PEP 285 ?C Adding a bool type,布爾值
PEP 289 ?C Generator Expressions,生成器表達式
PEP 318 ?C Decorators for Functions and Methods,裝飾器
PEP 342 ?C Coroutines via Enhanced Generators,協程
PEP 343 ?C The “with” Statement,with語句
PEP 380 ?C Syntax for Delegating to a Subgenerator,yield from語法
PEP 405 ?C Python Virtual Environments,虛擬環境
PEP 471 ?C os.scandir() function,遍歷目錄
PEP 484 ?C Type Hints,類型約束
PEP 492 ?C Coroutines with async and await syntax,async/await語法
PEP 498 ?C Literal String Interpolation Python,字符串插值
PEP 525 ?C Asynchronous Generators,異步生成器
PEP 572 ?C Assignment Expressions,表達式內賦值(最爭議)
PEP 3105 ?C Make print a function,print改為函數
PEP 3115 ?C Metaclasses in Python 3000,元類
PEP 3120 ?C Using UTF-8 as the default source encoding
PEP 3333 ?C Python Web Server Gateway Interface v1.0.1,Web開發
PEP 8000 ?C Python Language Governance Proposal Overview,GvR老爹推出決策層后,事關新決策方案
對PEP的貢獻
雖無確切數據作證,我國Python開發者的數量應該比任何國家都多。然而,縱觀PEP 0 里面列舉的200多個PEP作者,我只看到了一個像是漢語拼音的國人名字(不排除看漏,或者使用了英文名的)。反差真是太大了。
我也非常希望,國內的Python黑客們的名字,能越來越多地出現在那個列表里,出現在Python核心開發者的列表里。
此外,關于對PEP的貢獻,還有一種很有效的方式,就是將PEP翻譯成中文,造福國內的Python學習社區。經過一番搜索,我還沒有看到系統性翻譯PEP的項目,只找到了零星的對于某個PEP的翻譯。
表達一下我的私心,希望本文能給大家帶來知識和見識的增長,激發小伙伴們的學習熱情!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
