python程式碼規範
python程式碼規範
1.縮排
4個空格,在linux系統下體現比較明顯,IDE會將Tab轉成4個空格,放心使用
2.行的最大長度
每行程式碼的最長字元數不超過80個,一屏可以看完,不需要左右移動
3.空行
本頁的一級類或者方法之間空2行,二級類和方法之間空1行
class A(object): # 空1行 def __init__(self): a = 1 # 空1行 class B(object): b = 1 # 空1行 class C(object): c = 1 # 空1行 def aa(self): aa = self.B() # 空1行 # 空1行 class B(object): # 空1行 def __init__(self): a = 1 # 空1行 # 空1行 def a(): return True # 頁尾空1行
4.類命名
大駝峰命名:所有單詞的首字母都大寫,並且不使用特殊字元、下劃線和數字
# ✔️ class CodeStandard(object): # ❌ class Code-Standard(object): class Code_Standard(object): class _CodeStandard(object): class codeStandard(object): class Codestandard(object): class Codestandard2(object):
5.方法命名
全小寫字元或者下劃線,多單詞用下劃線連線,但下劃線不能做首字母
# ✔️ def code_standard(): # ❌ def Code_standard(): def _codestandard(): # 內建函式,受保護 def __codestandard(): # 內建函式,受保護 def code__standard(): def codestandard():
6.常量命名
以大寫字母開頭,全部大寫字母或下劃線或數字,多見於專案的settings檔案中
MAX_SIZE = 100
7.註釋
單行註釋:若註釋獨佔一行,#號頂頭,空1格後寫註釋;若是行尾註釋,空2格後#號再空1格寫註釋
多行註釋:三對雙引號(推薦使用)和三對單引號
複雜邏輯一定要寫註釋,除非這個專案就你一個人管一輩子
# 程式碼註釋 def code_standard(): # 程式碼註釋 """ A... B... """ ''' A... B... '''
8.匯入
每個檔案頭,都會有一些匯入,匯入順序為:先匯入python包,再匯入第三方包,最後匯入自定義的包。不使用的包不要匯入,不要兩個檔案迴圈匯入
import sys, os # python包,可匯入多個 import pytz # 第三方包 from datetime import datetime # python包 from django.http import request, response # 第三方包 from mysite.test import Test # 自定義包 from mysite.test import * # 不要讓我看到 import * 的這種程式碼,看到一次,我扣光你績效
9.空格
給變數賦值時,變數後空1個格,運算子或逗號後空1個格,作為引數時符號前後不空格
# ✔️ a = 1 a += 2 def b(num=0): # ❌ a = 111 # 不要值都右對齊,整些沒有用的 b = 2 c = 23
10.try
程式碼中要儘量少的出現 異常捕獲 的程式碼,有些臨界值或極值你是可以預見的,如果沒有預見,那就讓程式碼報錯,重新修改程式碼,這是一個好的方式,加多了異常捕獲,反而會導致問題難以定位,勞心勞力,勞民傷財,編碼的好心情就沒了。異常也分好多種型別,可以根據不同的型別去做出相應的邏輯處理
# ❌ try: a += 2 except Exception, e: log.error(e) # 最討厭這種,出錯無法定位,簡直就是披著羊皮的狼
11.全域性變數名
沒有特殊需求,不要使用全域性變數,有時候自己怎麼掉坑裡了都不知道
global aa
12.變數和傳參不要使用關鍵字
# ❌ len = 0 type = 'mysql' id = 1 str = 'ffe' def aa(type='mongo'):
13.方法的引數預設值中,不要有列表的預設值(引數傳的是指標)
# ❌ def a(a, b=[]): b.append(a) return b >>> a(1, b=list('a')) ['a', 1] >>> a(2, b=list('a')) ['a', 2] >>> a('a') ['a'] >>> a('b') ['a', 'b'] >>> a('c') ['a', 'b', 'c'] # 這就是經常說,為啥我的結果有以前的重複的資料,解決:方法頭重新定義列表
14.方法的返回值
優先返回True或False,
其次是返回資料,但一定要保證返回的資料型別是一致的,別if裡返回的是True,else裡返回的是資料。很傷腦筋的。
django專案規範
. ├── README.md # 專案說明 ├── db.sqlite3 # sqlite檔案資料庫,一般採用關係型和非關係型資料庫(沒有此檔案) ├── draw # 主專案目錄(裡面可建多app) │ ├── __init__.py # 匯入的根檔案 │ ├── admin.py # 專案管理員配置看到的資訊 │ ├── migrations # 資料庫遷移指令碼目錄 │ │ ├── 0001_initial.py # 遷移指令碼 │ │ └── __init__.py │ ├── models.py # 資料建模,專案中最重要的東西 │ ├── settings.py # 專案的環境變數 │ ├── urls.py # 專案的路由,url的跳轉(不要使用反射,url規範如下) │ ├── views.py # 檢視層,邏輯處理 │ └── wsgi.py # 專案服務的啟動入口 ├── manage.py # 專案命令的入口 ├── media # 上傳上來的媒體檔案的存放位置 │ └── avatar # 分類目錄 │ └── mac_bsk3xvr.png # 媒體檔案(頭像) ├── requirements.txt # 專案使用的環境包和版本 ├── static # 專案使用的靜態檔案目錄 │ ├── css # 樣式檔案目錄 │ │ └── application.css # 樣式檔案 │ ├── img # 圖片目錄 │ │ ├── header_bg.jpg # 圖片檔案 │ │ ├── header_bg1.jpg │ │ ├── header_bg_repeat.png │ │ └── header_icons.png │ └── js # 指令碼目錄 │ ├── application.js # 指令碼目錄 │ ├── jquery-1.8.0.min.js │ └── rand.js └── templates # html模板目錄 └── index.html # html檔案
url規範
優秀的URL是可以表達這個介面所實現的功能的
api/zoos/ #所有動物園 api/zoos/1/ #id為1的動物園 api/zoos/1/animals/ #id為1的動物園中的所有動物