學習Python,怎能不懂點PEP呢?

2021-09-19 22:21:19 字數 4210 閱讀 3558

或許你是乙個初入門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 像皮擦 背...