PEP8編碼規範,及開發中的一些慣例和建議
阿新 • • 發佈:2018-08-21
ret mar 小寫 比較運算 -c 包含 user def 有意
為什麽要有編碼規範
規範的代碼給人的第一感覺是【美觀】,美的東西總是更加的吸引人,也願意觀看。亂糟糟得是不是會讓人不由自主地想飆臟話。所以美觀進而帶來的是代碼的【可讀性】強,想一想你寫的代碼可讀性非常高,是不是維護起來也更加容易,所以可讀性強帶來的是代碼的【可維護性】強,最終你的代碼【健壯性】高,不容易出BUG,出了也容易解決。
錯誤的代碼編寫示例
1 from django.conf import settings 2 from user.models import * 3 import sys, os 4 mod=0xffffffff 5 def foo ( a , b = 123 ):6 c={ ‘x‘ : 111 , ‘y‘ : 222 }#定義一個字典 7 d=[ 1 , 3,5 ] 8 return a,b , c 9 def bar(x): 10 if x%2==0 : return True
正確的代碼編寫
1 import sys 2 import os 3 4 from django.conf import settings 5 6 from user.models import User 7 8 MOD=0xffffffff 9 10 11 def foo(a, b=123):12 c={‘x‘: 111,‘y‘: 222} #定義一個字典 13 d=[1, 3, 5] 14 return a, b, c 15 16 17 def bar(x): 18 if x % 2 == 0: 19 return True
- 代碼編排
- 縮進4個空格,禁止空格與Tab混用
- 行長80字符,防止單行邏輯過於復雜import
- 不要使用 from xxx import * 這種語法
- 文件 xyz.py
-
__all__ = (‘a‘, ‘e‘, ‘_d‘) # 包含在這裏面的能被import到其他模塊裏面使用 a = 123 _b
- 縮進4個空格,禁止空格與Tab混用
-
-
- 文件 abc.py
-
from xyz import * # 用這種語法導入的時候,除了__all__中的變量,帶下劃線的是導入不進來的。
print(a) print(_b) print(c) print(_d) print(e)
-
-
- 順序單行不要 import 多個庫
- 標準庫
- 第三方庫
- 自定義庫
- 模塊內用不到的不要去 import
- 順序單行不要 import 多個庫
- 空格
- 問號和逗號後面跟一個空格,前面無空格。
- 二元操作符前後各一個空格,包括以下幾類:
- 數學運算符 + - * / // = & |
- 比較運算符 == != > < >= <= is not in
- 邏輯運算符 and or not
- 位運算符 & | ^ << >>
- 當=用於只是關鍵字參數或默認參數值時,不要在其兩側使用空格
- 適當添加空行
- 函數間:頂級函數間空2行,類的方法之間空1行
- 函數內:同一函數內邏輯塊之間,空一行
- 文件結尾:留一個空行
- 註釋
- 兩點需要避免:①逐行添加註釋②沒有一個註釋
- 行尾註釋:單行邏輯過於復雜時添加
- 塊註釋:一段邏輯開始時添加
- 引入外來算法或者配置時須在註釋中添加源連接,標明出處
- 函數、類、模塊盡可能添加docstring
- 命名
- 好的變量名 要能做到"詞能達意"
- 除非在lambda函數中,否則不要使用單字母的變量名(即使是lambda函數中的變量名也要盡可能的有意義)
- 包名、模塊名、函數名、方法、普通變量名全部使用小寫, 單詞間用下劃線連接
- 類名、異常名使用 CapWords (首字母大寫) 的方式, 異常名結尾加
Error
或Wraning
後綴 - 全局變量盡量使用大寫, 一組同類型的全局變量要加上統一前綴, 單詞用下劃線連接
- 函數名必須有動詞, 最好是 do_something 的句式, 或者 somebody_do_something 句式
- 語意明確、直白
- not xx in yy VS xx not in yy
- not a is b VS a is not b
程序的構建
- 函數是模塊化思想的體現
- 獨立的邏輯應該抽離成獨立函數,讓代碼結構更清晰,可復用度更高
- 一個函數只做一件事情, 並把這件事做好
- 大的功能用小函數之間靈活組合來完成
- 避免編寫龐大的程序,
- 自定義的變量名、函數名不要與標準庫中的名字沖突
PEP8編碼規範,及開發中的一些慣例和建議