前言
或許你是一個(gè)初入門Python的小白,完全不知道PEP是什么。又或許你是個(gè)學(xué)會(huì)了Python的熟手,見過幾個(gè)PEP,卻不知道這玩意背后是什么。那正好,本文將系統(tǒng)性地介紹一下PEP,與大家一起加深對(duì)PEP的了解。
目前,國內(nèi)各類教程不可勝數(shù),雖然或多或少會(huì)提及PEP,但籠統(tǒng)者多、局限于某個(gè)PEP者多,能夠詳細(xì)而全面地介紹PEP的文章并不多。
本文的目的是:盡量全面地介紹PEP是什么,告訴大家為什么要去閱讀PEP,以及列舉了一些我認(rèn)為是必讀的PEP,最后,則是搜羅了幾篇PEP的中文翻譯,希望能為Python學(xué)習(xí)資料的漢化,做點(diǎn)拋磚引玉的貢獻(xiàn)。
PEP是什么?
PEP的全稱是Python Enhancement Proposals,其中Enhancement是增強(qiáng)改進(jìn)的意思,Proposals則可譯為提案或建議書,所以合起來,比較常見的翻譯是Python增強(qiáng)提案或Python改進(jìn)建議書。
我個(gè)人傾向于前一個(gè)翻譯,因?yàn)樗N切。Python核心開發(fā)者主要通過郵件列表討論問題、提議、計(jì)劃等,PEP通常是匯總了多方信息,經(jīng)過了部分核心開發(fā)者review和認(rèn)可,最終形成的正式文檔,起到了對(duì)外公示的作用,所以我認(rèn)為翻譯成“提案”更恰當(dāng)。
PEP的官網(wǎng)是:https://www.python.org/dev/peps/,這也就是PEP 0 的地址。其它PEP的地址是將編號(hào)拼接在后面,例如:https://www.python.org/dev/peps/pep-0020/ 就是PEP 20 的鏈接,以此類推。
第一個(gè)PEP誕生于2000年,現(xiàn)在正好是18歲成年。到目前為止,它擁有478個(gè)“兄弟姐妹”。
官方將PEP分成三類:
I - Informational PEP
P - Process PEP
S - Standards Track PEP
其含義如下:
信息類: 這類PEP就是提供信息,有告知類信息,也有指導(dǎo)類信息等等。例如PEP 20(The Zen of Python,即著名的Python之禪)、PEP 404 (Python 2.8 Un-release Schedule,即宣告不會(huì)有Python2.8版本)。
流程類: 這類PEP主要是Python本身之外的周邊信息。例如PEP 1(PEP Purpose and Guidelines,即關(guān)于PEP的指南)、PEP 347(Migrating the Python CVS to Subversion,即關(guān)于遷移Python代碼倉)。
標(biāo)準(zhǔn)類: 這類PEP主要描述了Python的新功能和新實(shí)踐(implementation),是數(shù)量最多的提案。。
每個(gè)PEP最初都是一個(gè)草案(Draft),隨后會(huì)經(jīng)歷一個(gè)過程,因此也就出現(xiàn)了不同的狀態(tài)。以下是一個(gè)流程圖:
A ?C Accepted (Standards Track only) or Active proposal 已接受(僅限標(biāo)準(zhǔn)跟蹤)或有效提案
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,你可以按序號(hào)、按類型以及按狀態(tài)進(jìn)行檢索。而在PEP 1(PEP Purpose and Guidelines)里,官方詳細(xì)說明了PEP的意圖、如何提交PEP、如何修復(fù)和更新PEP、以及PEP評(píng)審的機(jī)制等等。
為什么要讀PEP?
無論你是剛?cè)腴TPython的小白、有一定經(jīng)驗(yàn)的從業(yè)人員,還是資深的黑客,都應(yīng)該閱讀Python增強(qiáng)提案。
依我之見,閱讀PEP至少有如下好處:
(1)了解Python有哪些特性,它們與其它語言特性的差異,為什么要設(shè)計(jì)這些特性,是怎么設(shè)計(jì)的,怎樣更好地運(yùn)用它們;
(2)跟進(jìn)社區(qū)動(dòng)態(tài),獲知業(yè)內(nèi)的最佳實(shí)踐方案,調(diào)整學(xué)習(xí)方向,改進(jìn)工作業(yè)務(wù)的內(nèi)容;
(3)參與熱點(diǎn)議題討論,或者提交新的PEP,為Python社區(qū)貢獻(xiàn)力量。
說到底,學(xué)會(huì)用Python編程,只是掌握了皮毛。PEP提案是深入了解Python的途徑,是真正掌握Python語言的一把鑰匙,也是得心應(yīng)手使用Python的一本指南。
哪些PEP是必讀的?
如前所述,PEP提案已經(jīng)累積產(chǎn)生了478個(gè),我們并不需要對(duì)每個(gè)PEP都熟知,沒有必要。下面,我列舉了一些PEP,推薦大家一讀:
PEP 0 ?C Index of Python Enhancement Proposals
PEP 7 ?C Style Guide for C Code,C擴(kuò)展
PEP 8 ?C Style Guide for Python Code,編碼規(guī)范(必讀)
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,文檔注釋規(guī)范
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,生成器表達(dá)式
PEP 318 ?C Decorators for Functions and Methods,裝飾器
PEP 342 ?C Coroutines via Enhanced Generators,協(xié)程
PEP 343 ?C The “with” Statement,with語句
PEP 380 ?C Syntax for Delegating to a Subgenerator,yield from語法
PEP 405 ?C Python Virtual Environments,虛擬環(huán)境
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,表達(dá)式內(nèi)賦值(最爭議)
PEP 3105 ?C Make print a function,print改為函數(shù)
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開發(fā)
PEP 8000 ?C Python Language Governance Proposal Overview,GvR老爹推出決策層后,事關(guān)新決策方案
對(duì)PEP的貢獻(xiàn)
雖無確切數(shù)據(jù)作證,我國Python開發(fā)者的數(shù)量應(yīng)該比任何國家都多。然而,縱觀PEP 0 里面列舉的200多個(gè)PEP作者,我只看到了一個(gè)像是漢語拼音的國人名字(不排除看漏,或者使用了英文名的)。反差真是太大了。
我也非常希望,國內(nèi)的Python黑客們的名字,能越來越多地出現(xiàn)在那個(gè)列表里,出現(xiàn)在Python核心開發(fā)者的列表里。
此外,關(guān)于對(duì)PEP的貢獻(xiàn),還有一種很有效的方式,就是將PEP翻譯成中文,造福國內(nèi)的Python學(xué)習(xí)社區(qū)。經(jīng)過一番搜索,我還沒有看到系統(tǒng)性翻譯PEP的項(xiàng)目,只找到了零星的對(duì)于某個(gè)PEP的翻譯。
表達(dá)一下我的私心,希望本文能給大家?guī)碇R(shí)和見識(shí)的增長,激發(fā)小伙伴們的學(xué)習(xí)熱情!
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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