1. 程式人生 > >PEP8編碼規範,及開發中的一些慣例和建議

PEP8編碼規範,及開發中的一些慣例和建議

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 
        = 456 c = asdfghjkl _d = [1,2,3,4,5,6] e = (9,8,7,6,5,4)
      • 文件 abc.py
      • from xyz import *          # 用這種語法導入的時候,除了__all__中的變量,帶下劃線的是導入不進來的。   
        print(a) print(_b) print(c) print(_d) print(e)
    • 順序單行不要 import 多個庫
      • 標準庫
      • 第三方庫
      • 自定義庫
    • 模塊內用不到的不要去 import       
  • 空格
    • 問號和逗號後面跟一個空格,前面無空格。
    • 二元操作符前後各一個空格,包括以下幾類:
      • 數學運算符 + - * / // = & |
      • 比較運算符 == != > < >= <= is not in
      • 邏輯運算符 and or not
      • 位運算符 & | ^ << >>
    • 當=用於只是關鍵字參數或默認參數值時,不要在其兩側使用空格
  • 適當添加空行
    • 函數間:頂級函數間空2行,類的方法之間空1行
    • 函數內:同一函數內邏輯塊之間,空一行
    • 文件結尾:留一個空行 
  • 註釋
    • 兩點需要避免:①逐行添加註釋②沒有一個註釋
    • 行尾註釋:單行邏輯過於復雜時添加
    • 塊註釋:一段邏輯開始時添加
    • 引入外來算法或者配置時須在註釋中添加源連接,標明出處
    • 函數、類、模塊盡可能添加docstring
  • 命名
    • 好的變量名 要能做到"詞能達意"
    • 除非在lambda函數中,否則不要使用單字母的變量名(即使是lambda函數中的變量名也要盡可能的有意義)
    • 包名、模塊名、函數名、方法、普通變量名全部使用小寫, 單詞間用下劃線連接
    • 類名、異常名使用 CapWords (首字母大寫) 的方式, 異常名結尾加 ErrorWraning 後綴
    • 全局變量盡量使用大寫, 一組同類型的全局變量要加上統一前綴, 單詞用下劃線連接
    • 函數名必須有動詞, 最好是 do_something 的句式, 或者 somebody_do_something 句式
  • 語意明確、直白
    • not xx in yy VS xx not in yy
    • not a is b VS a is not b

    程序的構建

      • 函數是模塊化思想的體現
      • 獨立的邏輯應該抽離成獨立函數,讓代碼結構更清晰,可復用度更高
      • 一個函數只做一件事情, 並把這件事做好
      • 大的功能用小函數之間靈活組合來完成
      • 避免編寫龐大的程序, “大” 意味著體積龐大, 邏輯復雜甚至混亂
    • 自定義的變量名、函數名不要與標準庫中的名字沖突

    PEP8編碼規範,及開發中的一些慣例和建議