Python代碼規范整理


python 代碼規范

(一)、代碼編碼:

1、國際慣例,文件編碼和 Python 編碼格式全部為 utf-8 ,例如:在 Python 代碼的開頭,要統一加上 # -- coding: utf-8 --。
2、Python 代碼中,非 ascii 字符的字符串,請需添加u前綴
3、若出現 Python編 碼問題,可按照以下操作嘗試解決:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

**

(二)、命名規范:

2.1、模塊

模塊盡量使用小寫命名,首字母保持小寫,盡量不要用下划線(除非多個單詞,且數量不多的情況)

# 正確的模塊名
import decoder
import html_parser

# 不推薦的模塊名
import Decoder

2.2、類名

類名使用駝峰(CamelCase)命名風格,首字母大寫,私有類可用一個下划線開頭

class Farm():
    pass

class AnimalFarm(Farm):
    pass

class _PrivateFarm(Farm):   # 私有
    pass

2.3、函數

函數名一律小寫,如有多個單詞,用下划線隔開

def run():
    pass

def run_with_env():
    pass

注:私有函數在函數前加一個下划線_

class Person():

    def _private_func():
        pass

2.4、變量名

變量名盡量小寫, 如有多個單詞,用下划線隔開

if __name__ == '__main__':
    count = 0
    school_name = ''

2.5、常量

常量采用全大寫,如有多個單詞,使用下划線隔開。

MAX_CLIENT = 100
MAX_CONNECTION = 1000
CONNECTION_TIMEOUT = 600

注:

變量名、類名取名必須有意義,嚴禁用單字母
變量名不要用系統關鍵字,如 dir type str等等

建議:

bool變量一般加上前綴 is_ 如:is_success

(三)、代碼格式

3.1 import 順序:

1、標准庫  
2、第三方庫  
3、項目本身

例如:
# 正確的寫法
import os
import sys

# 不推薦的寫法
import sys,os

# 正確的寫法
from foo.bar import Bar

# 不推薦的寫法
from ..bar import Bar

(注:每一行只導入一個庫,不要用(,)多個引入。 並且各import類型之間需要用空行隔開)

3.2 關於空行

模塊級函數和類定義之間空兩行;類成員函數之間空一行;

class A:

    def __init__(self):
        pass

    def hello(self):
        pass

def main():
    pass

3.3 關於空格

3.3.1在二元運算符兩邊各空一格[=,-,+=,==,>,in,is not, and]:
# 正確的寫法
i = i + 1
submitted += 1
x = x * 2 - 1
hypot2 = x * x + y * y
c = (a + b) * (a - b)

# 不推薦的寫法
i=i+1
submitted +=1
x = x*2 - 1
hypot2 = x*x + y*y
c = (a+b) * (a-b)
3.3.2函數的參數列表中,,之后要有空格
# 正確的寫法
def complex(real, imag):
    pass

# 不推薦的寫法
def complex(real,imag):
    pass
3.3.3 函數的參數列表中,默認值等號兩邊不要添加空格
# 正確的寫法
def complex(real, imag=0.0):
    pass

# 不推薦的寫法
def complex(real, imag = 0.0):
    pass
3.3.4 左括號之后,右括號之前不要加多余的空格
# 正確的寫法
spam(ham[1], {eggs: 2})

# 不推薦的寫法
spam( ham[1], { eggs : 2 } )
3.3.5 字典對象的左括號之前不要多余的空格
# 正確的寫法
dict['key'] = list[index]

# 不推薦的寫法
dict ['key'] = list [index]
3.3.6 不要為對齊賦值語句而使用的額外空格
# 正確的寫法
x = 1
y = 2
long_variable = 3

# 不推薦的寫法
x             = 1
y             = 2
long_variable = 3

(四)、models 內部定義順序:

1. All database fields
2. Custom manager attributes
3. class Meta
4. def (str)
5. def save()
6. def get_absolute_url()
7. Any custom methods

(五)、異常捕獲處理原則:

盡量只包含容易出錯的位置,不要把整個函數 try except
對於不會出現問題的代碼,就不要再用 try except了
只捕獲有意義,能顯示處理的異常
能通過代碼邏輯處理的部分,就不要用 try except
異常忽略,一般情況下異常需要被捕獲並處理,但有些情況下異常可被忽略,只需要用 log 記錄即可,可參考一下代碼:

def ignored():
    try:
        yield
    except Exceptions as e:
        logger.warning(e)
        pass

(六)、使用數字、常量表示狀態

兩種的話改為 true/false,多種改為 enum 可讀性更好

def enum(**enums):
    return type("Enum", (), enums)

StatusEnum = enum(
    SUCCESS=True,
    FAIL=False,
)

(七)、RestfulApi 接口規范:

7.1 HTTP請求方式

對於資源的具體操作類型,由HTTP動詞表示。常用的HTTP動詞有下面四個(括號里是對應的SQL命令)。

GET(SELECT):從服務器取出資源(一項或多項)

POST(CREATE):在服務器新建一個資源。

PUT(UPDATE):在服務器更新資源(客戶端提供改變后的完整資源)

DELETE(DELETE):從服務器刪除資源

實際舉例如下:

GET /product:列出所有商品

POST /product:新建一個商品

GET /product/ID:獲取某個指定商品的信息

PUT /product/ID:更新某個指定商品的信息

DELETE /product/ID:刪除某個商品

GET /product/ID/purchase :列出某個指定商品的所有投資者

get /product/ID/purchase/ID:獲取某個指定商品的指定投資者信息

7.2 接口返回內容

接口返回內容開發建議直接參考藍鯨 apigateway 規范,返回的內容中包含 result code data message request_id 這幾個字段
在這里插入圖片描述

7.3接口返回Status Code

**建議充分利用 HTTP Status Code 作為響應結果的基本狀態碼,基本狀態碼不能區分的 status,
再用響應 body 中"約定"的 code 進行補充

http狀態碼詳細說明請參考:https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660

常用狀態碼如下:

200 OK - [GET]:服務器成功返回用戶請求的數據,該操作是冪等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用戶新建或修改數據成功。
202 Accepted - [*]:表示一個請求已經進入后台排隊(異步任務)
204 NO CONTENT - [DELETE]:用戶刪除數據成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用戶發出的請求有錯誤,服務器沒有進行新建或修改數據的操作,該操作是冪等的。
401 Unauthorized - [*]:表示用戶沒有權限(令牌、用戶名、密碼錯誤)。
403 Forbidden - [*] 表示用戶得到授權(與401錯誤相對),但是訪問是被禁止的。
404 NOT FOUND - [*]:用戶發出的請求針對的是不存在的記錄,服務器沒有進行操作,該操作是冪等的。
406 Not Acceptable - [GET]:用戶請求的格式不可得(比如用戶請求JSON格式,但是只有XML格式)。
410 Gone -[GET]:用戶請求的資源被永久刪除,且不會再得到的。
422 Unprocesable entity - [POST/PUT/PATCH] 當創建一個對象時,發生一個驗證錯誤。
500 INTERNAL SERVER ERROR - [*]:服務器發生錯誤,用戶將無法判斷發出的請求是否成功。

(八 )、Python 代碼注釋

8.1 單行注釋(行注釋)

  • # 開頭,# 右邊的所有東西都被當做說明文字,而不是真正要執行的程序,只起到輔助說明作用
  • 示例代碼如下:
# 這是第一個單行注釋
print("hello python")

print("hello python")  # 輸出 `hello python`
注:如在代碼后面注釋,為了保證代碼的可讀性,注釋和代碼之間至少要有兩個空格

8.2 多行注釋

  • 如果希望編寫的 注釋信息很多,一行無法顯示,就可以使用多行注釋
  • 要在 Python 程序中使用多行注釋,可以用 一對 連續的 三個 引號(單引號和雙引號都可以)
  • 示例代碼如下:
"""
這是一個多行注釋
在多行注釋之間,可以寫很多很多的內容……
""" 
print("hello python")

(九)、其他注意問題

1、【必須】去除代碼中的 print,否則導致正式和測試環境 uwsgi 輸出大量信息
2、邏輯塊空行分隔
3、變量和其使用盡量放到一起
4、【必須】 import過長,要放在多行的時候,使用 from xxx import(a, b, c),不要用 \ 換行
5、Django Model 定義的 choices 直接在定義在類里面

關於代碼規范


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM