官术网_书友最值得收藏!

2.1 Python的基本編碼規范

很多語言都有其獨特的代碼風格,有些甚至發展成了一種編碼規范。這種規范雖然對代碼的運行沒有太多影響,但卻可以讓程序員更好地閱讀和理解代碼。

Python采用PEP 8作為編碼規范,其中PEP是Python Enhancement Proposal(Python增強建議書)的縮寫,8代表的是Python代碼的樣式指南。

我們先來看圖2-1所示的兩段功能完全相同的代碼。右側的代碼編寫格式看上去比左側的代碼更加規整,閱讀起來也更輕松、暢快,因為它遵循了基本的Python代碼編寫規范。如果在一個大的工程文件中出現較多的左邊這種編碼方式,將會給代碼閱讀者帶來極大的困難。

下面僅給讀者列出PEP 8中初學者應嚴格遵守的一些編碼規范:

(1)建議每行不超過80個字符,如果超過,建議使用小括號將多行內容隱式地連接起來,而不推薦使用反斜杠“\”進行連接。例如,如果一個字符串文本無法實現一行完全顯示,則可以使用小括號將其分開顯示,代碼如下:

圖2-1 兩段功能相同的Python代碼

當Python程序代碼太長需要換行時,可以使用括號“()”或者反斜杠“\”進行換行連接。這兩種方式都可以實現代碼換行,但使用括號“()”進行換行連接更加清晰和易于閱讀,也更符合Python的代碼風格規范:

注意,此編程規范適用于絕大多數情況,但以下兩種情況除外:①導入模塊的語句過長,②注釋里的URL。

(2)通常情況下,在運算符兩側、函數參數之間以及逗號兩側,都建議使用空格進行分隔。

(3)使用必要的空行可以增加代碼的可讀性,通常在頂級定義(如函數或類的定義)之間空兩行,而方法定義之間空一行,另外在用于分隔某些功能的位置也可以空一行。

(4)每個import語句只導入一個模塊,盡量避免一次導入多個模塊。

【例2-1】 模塊導入示例。

輸入如下代碼:

     #推薦
     import os   #導入os模塊
     import sys  #導入sys模塊
     #不推薦
     import os,sys

(5)不要在行尾加分號,也不要用分號將兩條命令放在同一行。

(6)使用括號寧缺毋濫,除非是用于實現行連接,否則不要在返回語句或條件語句中使用括號。不過在元組兩邊使用括號是可以的。

【例2-2】 括號應用示例。

輸入如下代碼:

(7)縮進。用4個空格來縮進代碼,絕對不要使用Tab和空格混用,很容易出錯。要么垂直對齊換行的元素,要么使用4個空格的懸掛式縮進。

(8)空行。頂級定義之間空兩行,比如函數或者類定義。方法定義、類定義與第一個方法之間都應該空一行。在函數或方法中,某些地方如果覺得合適,就空一行。

(9)空格。按照標準的排版規范來使用標點兩邊的空格,括號內不要有空格。

【例2-3】 空格應用示例。

輸入如下代碼:

在二元操作符兩邊都加上一個空格,比如賦值操作符(=)、比較操作符(==、<、>、!=、<>、<=、>=、in、not in、is、is not)、布爾操作符(and、or、not)等。至于算術操作符兩邊空格的使用,需要自己認真判斷,兩側務必要保持一致。

【例2-4】 操作符應用示例。

輸入如下代碼:

     # 推薦
     x = 1  #操作符=兩邊有空格
     # 不推薦
     x=4  #操作符=兩邊沒有空格

當“=”用于指示關鍵字參數或默認參數值時,不要在其兩側使用空格。

【例2-5】 “=”應用示例。

輸入如下代碼:

     # 推薦
     def complex(real, imag=0.0): return magic(r=real, i=imag)
     # 不推薦
     def complex(real, imag = 0.0): return magic(r = real, i = imag)

(10)TODO注釋。為臨時代碼使用TODO注釋是一種短期解決方案。TODO注釋應該在所有開頭處包含TODO字符串,緊跟著是用括號括起來的名字、E-mail地址或其他標識符,然后是一個可選的冒號。接著必須有一行注釋,解釋要做什么。

主要目的是為了有一個統一的TODO格式,這樣添加注釋的人就可以搜索到(并可以按需提供更多細節)。寫了TODO注釋并不保證寫的人會親自解決問題,當寫了一個TODO時需要注上名字。如果TODO是“將來做某事”的形式,那么請確保包含一個指定的日期或者一個特定的事件。

     # TODO(ww@163.com): Use a "*" here for string repetition.
     # TODO(ZZZ) Change this to use relations.

(11)導入格式。每個導入應該獨占一行。

【例2-6】 導入格式示例。

輸入如下代碼:

     # 推薦
     import time    #導入時間模塊
     import json    #導入json模塊
     # 不推薦
     import time, json

導入應該放在文件頂部,位于模塊注釋和文檔字符串之后,模塊全局變量和常量之前。導入應該按照從最通用到最不通用的順序分組:首先是標準庫導入,然后是第三方庫導入,最后是應用程序指定導入。

在每種分組中,應該根據每個模塊的完整路徑按字典序排序,忽略大小寫。

【例2-7】 導入格式示例匯總。

輸入如下代碼:

主站蜘蛛池模板: 德化县| 芜湖县| 泰兴市| 漯河市| 郑州市| 岳阳市| 高密市| 延边| 民丰县| 嘉峪关市| 双柏县| 项城市| 胶州市| 桓仁| 上高县| 厦门市| 永和县| 都匀市| 陆丰市| 吉林省| 汉中市| 浦县| 桦甸市| 巴塘县| 郧西县| 永昌县| 大宁县| 汤原县| 浦北县| 泾川县| 澳门| 天门市| 公安县| 水城县| 宁陕县| 昌吉市| 武强县| 伊春市| 扎赉特旗| 鹤壁市| 搜索|