Python學習筆記:PEP8經常使用編程規範

PEP8編碼規範是一種很是優秀的編碼規範,也獲得了Python程序員的廣泛承認,若是實踐中或者項目中沒有統一的編碼規範,建議儘可能遵循PEP8編碼規範,固然若是項目中已經有了自身的編碼規範,應當優先遵循自身的編碼規範,哪怕原先的代碼風格在你看來很糟糕,也要儘可能與源代碼風格保持一致。
原文地址:https://blog.csdn.net/ratsniper/article/details/78954852,原文很詳細,有代碼示例和更多講解,若是有足夠時間,建議閱讀原文,這篇筆記只是根據此文來整理了一些經常使用的點。c++

1、縮進和對齊
1.語法縮進:語法上的縮進使用4個空格(參數對齊等不必定要用4個空格),不要混用製表符與空格,Python2程序在命令行運行時,使用-t能夠發出製表符與空格混用的警告,而使用-tt就會使這些警告變成錯誤提示了
2.行寬:代碼行寬限制在79個字符(也能夠是99個字符),文檔和註釋限制在72個字符
3.對齊:當圓括號、方括號和花括號中的元素須要換行時,元素應該垂直對齊,並且若是下一條語句須要縮進時,好比if的條件語句和要執行的代碼塊,這些換行的元素應該使用更多的縮進來區分下面的縮進
4.換行:代碼換行時應該優先使用圓括號、方括號和花括號中的隱式續行,視狀況使用反斜槓\來進行換行
5.二元運算符:在二元雲算法的換行時推薦以二元運算符做爲新行的開始
6.多條語句同行:即便是簡單的語句,即便可使用分號,可是不推薦寫在同一行,好比再簡單的if/for/while語句也應該分行寫程序員

 

2、空行
1.頂級定義:頂級函數和類定義的先後使用兩個空行隔開
2.類方法:類中方法的定義使用一個空行隔開
3.邏輯分段:函數中的功能組和邏輯段使用空行來隔開(視狀況靈活運用)算法

 

3、import語句
1.import *和from xxx import *:這種通配符星號的用法應該儘可能避免使用
2.import xxx:這種語句有多個時,應該分開導入,不推薦使用import xxx, yyy
3.from xxx import x, xx:這種形式能夠一次導入多個而不用分行
4.普通導入:導入應該在文檔字符串和註釋以後,在全局變量和常量定義以前
5.導入順序:導入順序應該是標準庫,三方庫,以及本地模塊,且須要加空行分隔
6.導入路徑:導入應該儘可能使用絕對路徑,或使用顯式的相對路徑也是可行的(如:from . import xxx),儘可能避免隱式的相對路徑
7.雙下劃線變量導入:在像__version__、__author__等模塊級變量的導入應該在文檔和註釋以後,在import語句以前編程

 

4、空格
1.括號等以後的空格:避免緊跟在括號、中括號和大括號以後的空格,例如:func( list_[ 1 ], { 'age': 18 })。應該省去沒必要要的空格func(list_[1], {'age': 18})
2.逗號等以前的空格:避免緊跟在逗號、分號和冒號以前的空格,例如:a , b = b , a。應該省去沒必要要的空格a, b = b, a
3.切片中的空格:切片的冒號左右兩邊應該有相同的空格,切片的下標若是是數字或變量,建議冒號兩邊不用空格,若是下標是多個變量的表達式或者函數表達式,則建議冒號兩邊使用一個空格分隔
4.行尾的空格:避免在行尾添加空格,好比在換行符反斜槓\後有空格的話,那這個反斜槓\就不是換行符了,由於行尾是空格而不是反斜槓\
5.二元運算符:除了函數傳參和函數指定默認值等特殊狀況外,應該老是在二元運算符的兩邊添加一個空格,若是一個表達式有多個二元運算符(如:+-*/),那麼高優先級的二元運算符兩邊不用空格,低優先級兩邊添加一個空格,如:x = a*b + c/dapi

 

5、註釋
1.修改註釋:修改代碼時必定修改對應的註釋,千萬不要留下與代碼不對應的,甚至是錯誤的註釋,視狀況甚至能夠刪掉註釋也不留錯誤的註釋
2.行註釋:使用一個#和一個空格開始,而且與註釋的代碼具備相同縮進,若是須要使用行註釋寫多段意思的註釋,可使用一個空行註釋(即這一行只有一個#)來分隔不一樣意思的段落
3.代碼行以後的註釋:應該與前面的代碼間隔至少兩個空格,而後也是以使用一個#和一個空格開始,可是這種註釋應該儘可能少用,沒必要要的話就不用
4.文檔註釋:應該爲全部公共的模塊、函數、類和方法編寫文檔註釋,通常使用三個雙引號寫文檔註釋,且若是是單行註釋,則結尾的三引號應該與註釋內容同行,若是是多行註釋,則結尾三引號應該單獨一行socket

 

6、命名
1.舊代碼:若是原有的代碼與命名規範不同,應該與原有代碼保持一致
2.API:暴露的API或者給別人使用的API應該以使用場景來命名,而不是實現原理命名
3.首字母大寫加下劃線:這種命名風格不可取,好比Capitalized_Words_With_Underscores
4.單下劃線開頭:這種命名爲弱「內部使用」指示器,即模塊內非公有(「protected」),好比在使用from xxx import *語句時是是不會導入單下劃線開頭的對象的
5.單下劃線結尾:這種命名風格是爲了不與Python內部關鍵字衝突的一種約定
6.雙下劃線開頭:當在類中以雙下劃線開頭定義時,調用它的時候會在前面加上「_ClassName」,如調用類A中的屬性__a時,__a就變成了_A__a,這樣子類就不能夠隨便調用這個屬性了,能夠認爲它是「私有」的,但Python中沒有「私有」的說法,由於依然能夠經過A._A__a去訪問屬性
7.雙下劃線開頭和結尾:爲模塊和系統級變量,好比__name__、__init__等,咱們本身應該永遠避免使用這種命名風格
8.單字符變量:永遠要使用O(大寫的O)、l(小寫的L)和I(大寫的I),由於有些字體中沒法區分它們是數字0和1仍是英文字母L和O
9.包名和模板名:使用簡短全小寫的名稱,包名不建議使用下劃線,模塊名爲了提升可讀性可使用下劃線
10.c/c++擴展模塊:使用c/c++編寫的擴展模塊須要在模塊名稱加一個下劃線前綴,如:_socket
11.類名:首字母大寫
12.異常名:異常通常也是類,因此首字母也是大寫,若是異常確實是一個錯誤,那須要在類名後加上「Error」後綴
13.函數名:全小寫,爲了提升可讀性也可使用下劃線,大小寫混合的狀況只限於爲了與原來的代碼兼容的狀況
14.全局變量:只在模塊內使用的全局變量和普通變量同樣定義,可是須要注意使用「from xxx import *」的xxx模塊中的全局變量應該使用單下劃線開頭防止內部接口或變量的對外暴露
15.實例變量:非公有方法和實例變量使用單下劃線開頭(「protected」),雙下劃線開頭會觸發Python的命名轉換規則(在前面加上「_ClassName」)以免和子類命名的衝突
16.常量:常量一般是模塊級的,使用全大寫和下劃線配合函數

 

7、編程建議
1.字符(串)鏈接:儘可能避免使用如str1 += str2或str1 = str1 + str2的方式鏈接字符(串),建議使用字符串方法join()方法來鏈接字符(串)
2.單例對象判斷:在於如None這樣的單例對象進行判斷時,應該使用is None或者is not None來進行判斷
3.自定義異常:自定義異常應該繼承自Exception,而不是BaseException
4.try/except:在try中只填充可能出錯的代碼,不要一股腦把所有代碼放進去
5.return語句:除非函數中沒有return語句,若是函數中有return語句,那麼在其餘可能結束的狀況也顯示的使用return語句,若是其餘狀況確實沒有值要返回(如運行到了函數結束處,卻不須要返回任何值),也要使用return None顯示指明
6.startswith/endswith:判斷字符串開頭前綴或結尾後綴時,使用字符串自己的startswith/endswith,不用字符串的切割來進行判斷
7.對象類型的比較:對象類型的比較使用isinstance,而不是type
8.「空」值判斷:對於空字符串、空列表、空字典等的判斷,直接使用自己來進行布爾值判斷,如空字符串使用if str1: pass,而不是if str1 == '': pass字體

相關文章
相關標籤/搜索