天天看點

《編寫高品質Python代碼的59個有效方法》——第2條:遵循PEP 8風格指南

本節書摘來自華章社群《編寫高品質python代碼的59個有效方法》一書中的第2條:遵循pep 8風格指南,作者[美]布雷特·斯拉特金(brett slatkin),更多章節内容可以通路雲栖社群“華章社群”公衆号檢視

第2條:遵循pep 8風格指南

《python enhancement proposal #8》(8号python增強提案)又叫pep 8,它是針對python代碼格式而編訂的風格指南。盡管可以在保證文法正确的前提下随意編寫python代碼,但是,采用一緻的風格來書寫可以令代碼更加易懂、更加易讀。采用和其他python程式員相同的風格來寫代碼,也可以使項目更利于多人協作。即便代碼隻會由你自己閱讀,遵循這套風格也依然可以令後續的修改變得容易一些。

空白:python中的空白(whitespace)會影響代碼的含義。python程式員使用空白的時候尤其在意,因為它們還會影響代碼的清晰程度。

使用space(空格)來表示縮進,而不要用tab(制表符)。

和文法相關的每一層縮進都用4個空格來表示。

每行的字元數不應超過79。

對于占據多行的長表達式來說,除了首行之外的其餘各行都應該在通常的縮進級别之上再加4個空格。

檔案中的函數與類之間應該用兩個空行隔開。

在同一個類中,各方法之間應該用一個空行隔開。

在使用下标來擷取清單元素、調用函數或給關鍵字參數指派的時候,不要在兩旁添加空格。

為變量指派的時候,指派符号的左側和右側應該各自寫上一個空格,而且隻寫一個就好。

命名:pep 8提倡采用不同的命名風格來編寫python代碼中的各個部分,以便在閱讀代碼時可以根據這些名稱看出它們在python語言中的角色。

函數、變量及屬性應該用小寫字母來拼寫,各單詞之間以下劃線相連,例如,lowercase_underscore。

受保護的執行個體屬性,應該以單個下劃線開頭,例如,_leading_underscore。

私有的執行個體屬性,應該以兩個下劃線開頭,例如,__double_leading_underscore。

類與異常,應該以每個單詞首字母均大寫的形式來命名,例如,capitalizedword。

子產品級别的常量,應該全部采用大寫字母來拼寫,各單詞之間以下劃線相連,例如,all_caps。

類中的執行個體方法(instance method),應該把首個參數命名為self,以表示該對象自身。

類方法(class method)的首個參數,應該命名為cls,以表示該類自身。

表達式和語句:《the zen of python》(python之禅)中說:“每件事都應該有直白的做法,而且最好隻有一種。”pep 8在制定表達式和語句的風格時,就試着展現了這種思想。

采用内聯形式的否定詞,而不要把否定詞放在整個表達式的前面,例如,應該寫if a is not b而不是if not a is b。

不要通過檢測長度的辦法(如if len(somelist) == 0)來判斷somelist是否為[]或''等空值,而是應該采用if not somelist這種寫法來判斷,它會假定:空值将自動評估為false。

檢測somelist是否為[1]或'hi'等非空值時,也應如此,if somelist語句預設會把非空的值判斷為true。

不要編寫單行的if語句、for循環、while循環及except複合語句,而是應該把這些語句分成多行來書寫,以示清晰。

import語句應該總是放在檔案開頭。

引入子產品的時候,總是應該使用絕對名稱,而不應該根據目前子產品的路徑來使用相對名稱。例如,引入bar包中的foo子產品時,應該完整地寫出from bar import foo,而不應該簡寫為import foo。

如果一定要以相對名稱來編寫import語句,那就采用明确的寫法:from.import foo。

檔案中的那些import語句應該按順序劃分成三個部分,分别表示标準庫子產品、第三方子產品以及自用子產品。在每一部分之中,各import語句應該按子產品的字母順序來排列。

要點

當編寫python代碼時,總是應該遵循pep 8風格指南。

與廣大python開發者采用同一套代碼風格,可以使項目更利于多人協作。

采用一緻的風格來編寫代碼,可以令後續的修改工作變得更為容易。